17

Lombokを活用する既存のJavaMavenプロジェクトにgroovyを追加しようとしています。残念ながら、以下のpomフラグメントを使用してgroovy-maven-eclipseコンパイラーを有効にすると、lombokアノテーションが付けられた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パッケージを実行しようとすると、問題が発生します。

4

2 に答える 2

27

@Todd:groovyツールを使用してpmavenプラグインを開発する必要がない場合は、groovy-eclipse-compilerが最適です(http://groovy.codehaus.org/Groovy-Eclipse+compiler+plugin+for+Mavenを参照) )。

@Ambience:http: //jira.codehaus.org/browse/GRECLIPSE-1293で関連する問題に到達しました。このバグは、最新のgroovy-eclipse-compiler2.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>

maven-compiler-plugin内のlombokへの追加された依存関係

編集: バージョンを更新

于 2012-03-30T18:52:59.960 に答える
2

これを書いている時点での正解は、今でも受け入れられているものです。その評判を盗むつもりはありませんが、古くなっているので(Codehausへのリンクなど)、もう一度編集したくないので、基本的には更新するために書き直さなければなりません。

これは、に基づくMavenPOMです。

  • Java 8
  • Mavenコンパイラ3.7.0
  • Groovy 2.4.7
  • GroovyEclipseコンパイラ2.9.3-01
  • GroovyEclipseバッチ2.4.15-01
  • ロンボク1.16.20

また、MavenCentralにない最新のGroovyEclipseバージョンのプラグインリポジトリー構成も含まれています。

ちなみに、私はこのセットアップを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-EclipsewikiのLombokセクションを参照してください。

于 2018-05-20T05:25:42.897 に答える