Maven Groovy и Java + Ломбок
Я пытаюсь добавить groovy в существующий проект Java Maven, который использует Lombok. К сожалению, когда я включаю компилятор groovy-maven-eclipse с фрагментом pom ниже, мои файлы java с аннотациями lombok не компилируются. Насколько я могу судить, Ломбок вообще не участвует в компиляции java-файлов.
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.1</version>
<configuration>
<compilerId>groovy-eclipse-compiler</compilerId>
<verbose>true</verbose>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>2.6.0-01-SNAPSHOT</version>
</dependency>
</dependencies>
</plugin>
Я также должен отметить, что в eclipse (с m2e) все работает нормально. Моя проблема возникает, когда я пытаюсь сделать пакет mvn.
2 ответа:
@Todd: компилятор groovy-eclipse-лучший выбор, если вам не нужно разрабатывать плагин maven с некоторыми инструментами groovy (см. http://groovy.codehaus.org/Groovy-Eclipse + компилятор + плагин+для+Maven).
@Ambience: вы достигли вопроса, связанного с http://jira.codehaus.org/browse/GRECLIPSE-1293 . Эта ошибка теперь исправлена с помощью последней версии groovy-eclipse-compiler 2.6.1-01-SNAPSHOT.
Примечание : теперь доступна последняя версия 2.9.1-01, видишь http://docs.groovy-lang.org/latest/html/documentation/tools-groovyeclipse.html
Вы должны изменить свой pom следующим образом:
<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <compilerId>groovy-eclipse-compiler</compilerId> <verbose>true</verbose> <fork>true</fork> <compilerArguments> <javaAgentClass>lombok.launch.Agent</javaAgentClass> </compilerArguments> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>2.9.1-01</version> </dependency> <!-- for 2.8.0-01 and later you must have an explicit dependency on groovy-eclipse-batch --> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-batch</artifactId> <version>2.3.7-01</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.4</version> </dependency> </dependencies> </plugin>
Обязательные части:
<fork>true</fork> <compilerArguments> <javaAgentClass>lombok.launch.Agent</javaAgentClass> </compilerArguments>
Добавленная зависимость от lombok внутри maven-compiler-plugin
Edit: обновление версий
Правильным ответом на момент написания было и остаетсяпринятое решение . У меня нет намерения красть эту репутацию, но я также не хочу редактировать ее еще раз, потому что она немного устарела (например, ссылка на Codehaus), поэтому мне все равно придется ее переписать, чтобы обновить.
Вот Maven POM, основанный на
- Java 8
- Maven Compiler 3.7.0
- Заводной 2.4.7
- Groovy Eclipse Compiler 2.9.3-01
- Заводной Пакет Eclipse 2.4.15-01
- Ломбок 1.16.20
Он также содержит конфигурацию репозитория плагинов для последней версии Groovy Eclipse, не найденной на Maven Central.
Кстати, я использую эту установку для своих тестов Spock + Geb.<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>de.scrum-master.testing</groupId> <artifactId>my-artifact</artifactId> <version>1.0-SNAPSHOT</version> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> <version.groovy-eclipse-compiler>2.9.3-01</version.groovy-eclipse-compiler> <version.groovy-eclipse-batch>2.4.15-01</version.groovy-eclipse-batch> <version.lombok>1.16.20</version.lombok> </properties> <pluginRepositories> <!-- Needed for latest Groovy Eclipse version --> <pluginRepository> <id>bintray</id> <name>Groovy Bintray</name> <url>https://dl.bintray.com/groovy/maven</url> <releases> <updatePolicy>never</updatePolicy> </releases> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.6.0</version> <configuration> <source>${maven.compiler.source}</source> <target>${maven.compiler.target}</target> <!-- IMPORTANT --> <useIncrementalCompilation>false</useIncrementalCompilation> <encoding>${project.build.sourceEncoding}</encoding> <!-- Use Groovy Eclipse Compiler --> <compilerId>groovy-eclipse-compiler</compilerId> <!-- Lombok agent needed for successful Maven compilation, see https://github.com/groovy/groovy-eclipse/wiki/Groovy-Eclipse-Maven-plugin#project-lombok --> <compilerArguments> <javaAgentClass>lombok.launch.Agent</javaAgentClass> </compilerArguments> <!-- Without this Lombok compilation fails --> <fork>true</fork> </configuration> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>${version.groovy-eclipse-compiler}</version> </dependency> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-batch</artifactId> <version>${version.groovy-eclipse-batch}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${version.lombok}</version> </dependency> </dependencies> </plugin> <plugin> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-eclipse-compiler</artifactId> <version>${version.groovy-eclipse-compiler}</version> <extensions>true</extensions> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>org.codehaus.groovy</groupId> <artifactId>groovy-all</artifactId> <version>2.4.7</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${version.lombok}</version> </dependency> </dependencies> </project>
Подробнее об этой теме читайте в разделеЛомбок Вики Groovy-Eclipse .