Nano Hash - криптовалюты, майнинг, программирование

Grails: добавить задачу сборки для компиляции

Я использую Грааль 2.4.4. Некоторые из моих классов аннотированы, и APT (инструмент обработки аннотаций) должен обрабатывать эти аннотации во время компиляции для создания некоторых источников.

Мне удалось все сделать с помощью обходного пути создания maven pom.xml, запустив grails generate-pom и оттуда добавив определенные плагины и настроив их.

Есть ли возможность использовать встроенную конфигурацию компилятора Grails BuildConfig.groovy для достижения той же цели без обхода через maven pom.xml?

Чтобы быть более конкретным, я создаю рабочий процесс с помощью AWS SWF. И SWF использует аннотации, которые должны генерировать некоторые клиентские классы. Поэтому в pom.xml я добавил это. Он отлично работает, когда я запускаю mvn compile:

<build>
...
    <plugin>
                <groupId>com.mysema.maven</groupId>
                <artifactId>apt-maven-plugin</artifactId>
                <version>1.1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>process</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>src/generated</outputDirectory>
                            <processor>com.amazonaws.eclipse.simpleworkflow.asynchrony.annotationprocessor.AsynchronyDeciderAnnotationProcessor</processor>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.amazonaws</groupId>
                        <artifactId>aws-java-sdk-flow-build-tools</artifactId>
                        <version>1.9.34</version>
                    </dependency>
                    <dependency>
                        <groupId>org.freemarker</groupId>
                        <artifactId>freemarker</artifactId>
                        <version>2.3.21</version>
                    </dependency>
                    <dependency>
                        <groupId>org.apache.commons</groupId>
                        <artifactId>commons-lang3</artifactId>
                        <version>3.3.2</version>
                    </dependency>
                </dependencies>
            </plugin>
...
</build>

Ответы:


1

Я узнал себя, как это сделать в Grails. По сути, я создал сценарий, который можно вызвать с помощью команды Grails. Этот скрипт не что иное, как gant скрипт, с помощью которого вы можете вмешиваться в работу ant. Кроме того, мне пришлось добавить библиотеки в папку libs в Grails, чтобы они были в пути к классам.

Вот шаги:

  1. Создайте новый скрипт Grails

    grails create-script generateSources Это создаст сценарий с именем GenerateSources.groovy в вашем каталоге сценариев Grails.

  2. Отредактируйте файл GenerateSources.groovy

    includeTargets << grailsScript("_GrailsCompile") target(generateSources: "Generates sources for SWF workflow") { ant.delete(dir:"src/generated/java") ant.delete(dir:"target/generated-classes") depends(compile) ant.mkdir(dir:"src/generated/java") ant.mkdir(dir:"target/generated-classes") ant.javac(destdir:"target/generated-classes", classpathref:"grails.compile.classpath", source:"1.7", target:"1.7"){ compilerarg(value:"-proc:only") compilerarg(value:"-s") compilerarg(value:"src/generated/java") src(path:"src/java") } } setDefaultTarget(generateSources)

Это включает в себя ссылки и задачи из скрипта GrailsCompile, удаляет некоторые папки (на случай, если вы повторно запустите этот скрипт), вызывает задачу компиляции из собственного ганта grails, создает необходимые целевые папки

  1. Скопируйте необходимые jar-файлы в папку grails lib. В моем случае мне пришлось скопировать aws-java-sdk-flow-build-tools-1.9.34.jar, который включает в себя процессор аннотаций и другую зависимость freemarker-2.3.18.jar. Javac автоматически вызовет правильный APT для обработки аннотаций в папке src/java

  2. Запустите скрипт grails generateSources, который запустит задачу компиляции и вашу новую задачу.

Открыть: я хотел бы автоматически подключить эту задачу при вызове компиляции Grails. Я все еще работаю над этим.

15.05.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..