Mavenが管理するLombokプロジェクトがあり、Intellijを使用しています。ビルド後、target/generate-sources/delombokで生成されたソースが原因で、重複するクラスについてIntellijで常に多くのエラーが発生します。これらのエラーをgitで取り除くために私にできることはありますか?今はターゲットフォルダを削除するだけですが、これは本当にイライラします。
私はMavenに標準構成を持っており、のlombokソースコードはmain/src/lombokにあります。
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.8.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
</plugin>
<profiles>
<profile>
<id>lombok-needs-tools-jar</id>
<activation>
<file>
<exists>${Java.home}/../lib/tools.jar</exists>
</file>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.8.0</version>
<dependencies>
<dependency>
<groupId>Sun.jdk</groupId>
<artifactId>tools</artifactId>
<version>1.8</version>
<scope>system</scope>
<systemPath>${Java.home}/../lib/tools.jar</systemPath>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</profile>
</profiles>
delombokゴールドキュメント によると:デフォルトの出力ディレクトリは次のとおりです。
_${project.build.directory}/generated-sources/delombok
_
JetBrainsチームのメンバーを見つけました コメント 次のように述べています:
IDEAは、その下に生成されたソースがない場合、ビルド 'target'フォルダーを自動的に除外します。それ以外の場合は、生成されたもの以外のすべてのサブフォルダーを除外します。
除外したい生成されたコードまたはビルドアーティファクトがある場合は、それを「target」フォルダーの下に置くことができます。
つまり、_/generated-sources
_ディレクトリはデフォルトで除外されません。一部のファイルを除外する場合は、_/target
_ではなく親_/generated-sources
_ディレクトリに配置する必要があります。
これを実現するには、プラグインを構成し、デフォルト以外の_<outputDirectory>
_を提供する必要があります。
_<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.18.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
<configuration>
<sourceDirectory>src/main/Java</sourceDirectory>
<outputDirectory>${project.build.directory}/delombok</outputDirectory>
<addOutputDirectory>false</addOutputDirectory>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
_
これにより、IDEAがDuplicate class found in (...)
警告を生成しなくなります。
Krzusiekのソリューションを試しましたが、IntelliJはsrc/main/Javaのソースファイルを重複としてマークしていました。
lombok-maven-plugin
の微調整に何度も失敗した後、コンパイル後にdelombok
フォルダーを削除することにしました。そのフォルダーのみがコンパイルの中間段階としてサーバーになり(私の場合、aspectj-maven-plugin
を介してAspectJコンパイラーでlombokを使用する必要がありました)、ソースファイルがコンパイルされたらそれを保持する必要はありません。
コンパイルのたびにdelombok
フォルダーを手動で削除するのは非常に面倒なので、delombok
フォルダーを具体的にターゲットとするmaven-clean-plugin
の追加実行を構成しました。
POMには次のものが含まれている必要があります。
<build>
<sourceDirectory>${project.build.directory}/generated-sources/delombok</sourceDirectory>
<plugins>
<!-- will delombok source files into /target/generated-sources/delombok -->
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.16.0</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
<configuration>
<addOutputDirectory>false</addOutputDirectory>
<sourceDirectory>src/main/Java</sourceDirectory>
</configuration>
</plugin>
<!-- other plugins bound to compile phase should go here -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<executions>
<execution>
<id>delombok-removal</id>
<phase>compile</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
<filesets>
<fileset>
<directory>${project.build.sourceDirectory}/com</directory> <!-- assuming your root package is something like com.mycompany -->
</fileset>
</filesets>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
アイデアは、生成されたソースをソースから削除することです。プロジェクト構造->パッケージのリストから選択し、右側でそのパッケージのソースを取得するために使用されているフォルダーを見つけます。そのリストに生成されたソースが見つかった場合は、それを削除します。