1

delombok maven プラグインを使用すると、すべてのファイルが「target/generated-sources/delombok」に配置されます。Mavenコンパイラを実行しようとすると、クラスの重複について不平を言うので、この質問が推奨するようにaddOutputDirectoryをfalseに設定します。現在の問題は、deombok されたファイルが無視されるため、コンパイラがメソッドの欠落について不平を言うことです。

デフォルトの 'src/main/java' ディレクトリを無視し、代わりに 'target/generated-sources/delombok' ディレクトリを使用してコンパイルするように Maven コンパイラ プラグインに指示するにはどうすればよいですか?

mvn compile -X を実行すると、コンパイラの実行時に次の出力が生成されます。

[DEBUG]   (f) compileSourceRoots = [C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java, C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java]
[DEBUG]   (f) compilerId = javac
[DEBUG]   (f) debug = true
[DEBUG]   (f) encoding = UTF-8
[DEBUG]   (f) failOnError = true
[DEBUG]   (f) forceJavacCompilerUse = false
[DEBUG]   (f) fork = false
[DEBUG]   (f) generatedSourcesDirectory = C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\annotations
[DEBUG]   (f) mojoExecution = org.apache.maven.plugins:maven-compiler-plugin:3.0:compile {execution: default-compile}
[DEBUG]   (f) optimize = false
[DEBUG]   (f) outputDirectory = C:\Users\Jamey.Holden\workspace\Apollo\Website\target\classes
[DEBUG]   (f) proc = none
[DEBUG]   (f) projectArtifact = ic.apollo:website:war:0.1
[DEBUG]   (f) showDeprecation = false
[DEBUG]   (f) showWarnings = false
[DEBUG]   (f) skipMultiThreadWarning = false
[DEBUG]   (f) source = 1.6
[DEBUG]   (f) staleMillis = 0
[DEBUG]   (f) target = 1.6
[DEBUG]   (f) verbose = false
[DEBUG]   (f) mavenSession = org.apache.maven.execution.MavenSession@393e6226
[DEBUG]   (f) session = org.apache.maven.execution.MavenSession@393e6226

次に、コマンド ライン オプションが出力されている場所のさらに下に、-sourcepath 引数が次-sourcepath C:\Users\Jamey.Holden\workspace\Apollo\Website\src\main\java;C:\Users\Jamey.Holden\workspace\Apollo\Website\target\generated-sources\java; のように表示されていることがわかります。

更新 私は問題の根底に到達していると思います。queryDSL を使用してメタエンティティを生成しているため、注釈処理を防ぐために proc=none を設定していましたが、これが注釈処理を回避するように設定されていない場合、コンパイラでエンティティが重複して検出されたというエラーが発生しました。proc=none と querydsl 注釈プロセッサを削除すると、問題が解決しました。これで、m2e を再び動作させることができました。

4

3 に答える 3

5

ドキュメントを読んでいないようです。プラグインをこのように正しく構成する必要があります。これは、generate-sources ライフサイクル フェーズであり、その後、生成されたソース ファイルは maven-compiler-plugin によって自動的に取得されます。 .

<build>
  <plugins>
    <plugin>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok-maven-plugin</artifactId>
      <version>0.11.6.0</version>
      <executions>
        <execution>
          <phase>generate-sources</phase>
          <goals>
            <goal>delombok</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
于 2012-11-21T10:05:18.180 に答える
3

これは、すべての人に役立つわけではありません。ただし、lombok を使用して独自の注釈プロセッサを作成する場合は、別の構成が必要です。

lombok なしでコンパイラを作成するには、proc を none に設定する必要があります。

      <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                                    <proc>none</proc>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>

また、lombok では、アノテーション プロセッサを明示的に設定する必要があります。

      <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven-compiler-plugin.version}</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
                <annotationProcessors>
                    <annotationProcessor>lombok.core.AnnotationProcessor</annotationProcessor>
                </annotationProcessors>
            </configuration>
        </plugin>
    </plugins>
于 2013-09-14T13:25:51.930 に答える
0

似たようなことをする

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-compiler-plugin</artifactId>
      <version>3.0</version>
      <configuration>
        <includes>
            <include>target/generated-sources/delombok/*.java</include>
        </includes>
        <excludes>
            <exclude>src/main/java</exclude>
        </excludes>         
      </configuration>
    </plugin>
于 2012-11-21T11:34:20.780 に答える