Alexa(Amazon:echo)スキルセットを構築しようとしています。同時に、このエクスペリエンスを、短剣2を介した依存性注入の学習テストベッドとして使用しようとします。ただし、maven-2 cmdを使用してパッケージをビルドします。
mvn Assembly:assembly -DdescriptorId=jar-with-dependencies package'.
完全な依存関係を持つZip jarを生成すると、次の例外トレースが生成されます。
[INFO] ------------------------------------------------------------------------
[INFO] Building Echo Device Client 1.0
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ echo-device-client ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/apil.tamang/Dropbox/Git/echo-device-client/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ echo-device-client ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 46 source files to /Users/apil.tamang/Dropbox/Git/echo-device-client/target/classes
An exception has occurred in the compiler (1.8.0_60). Please file a bug at the Java Bug Database (http://bugreport.Java.com/bugreport/) after checking the database for duplicates. Include your program and the following diagnostic in your report. Thank you.
Java.lang.IllegalStateException: endPosTable already set
at com.Sun.tools.javac.util.DiagnosticSource.setEndPosTable(DiagnosticSource.Java:136)
at com.Sun.tools.javac.util.Log.setEndPosTable(Log.Java:350)
at com.Sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.Java:667)
at com.Sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.Java:950)
at com.Sun.tools.javac.processing.JavacProcessingEnvironment$Round.<init>(JavacProcessingEnvironment.Java:892)
at com.Sun.tools.javac.processing.JavacProcessingEnvironment$Round.next(JavacProcessingEnvironment.Java:921)
at com.Sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.Java:1187)
at com.Sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.Java:1170)
at com.Sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.Java:856)
at com.Sun.tools.javac.main.Main.compile(Main.Java:523)
at com.Sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.Java:129)
at com.Sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.Java:138)
最初のコンパイルは正常に行われ、すべてのテストが実行され、正常に実行されます。物事が南下するのは、依存関係を「リンク」しているときのようです。 このファイル を見て、ビルド中のコンソール出力を確認してください。
私の質問は、別の方法を使用して依存関係を生成してみる価値があるかどうかです。そのためのメイブンについてはあまり知りません。使用できるパッチなどはありますか?回避策を考え出すことも可能だと思いますか?このプロジェクトを構築するために、dagger 2フレームワークを引き続き使用できるようにしたいと思います。
この問題はバグレポート JDK-8067747
:
(Jan Lahodaによって)
私の知る限り、このバグには2つの側面があります。
例外でクラッシュするjavacバグ。私はこれに取り組んでいますが、これが修正された場合、javacは入力をコンパイルしないことに注意してください。ファイラーから適切な例外がスローされます(以下を参照)。
mavenバグのように見えるもの:プロジェクトが「クリーンインストール」でコンパイルされると、注釈プロセッサがソースファイルを「target/generated-sources/annotations」に生成します。インクリメンタルコンパイルが完了すると、この生成されたファイルは入力としてjavacに渡され、注釈プロセッサは再度生成を試みますが、これは許可されていません。
これは、mavenのバグが修正されると、不適切な例外を伴う問題を報告するというjavac
のバグが無関係になることを意味します。ただし、Maven 2の実際のサポート終了日を考えると、その修正またはパッチが見つかるとは思えません。
この問題 で説明されているように、回避策は seIncrementalCompilation を無効にすることです:
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<useIncrementalCompilation>false</useIncrementalCompilation>
</configuration>
</plugin>
私の場合、これはmaven-processor-plugin
プラグインでJPAメタデータファイルを生成しているときに発生しました。特別なMavenプロファイルを使用してファイルを1回だけ作成し、ソースフォルダーに追加しました。
バグレポートに記載されているように、これは既存のファイルを再度コンパイルする必要がある場合に発生します。解決策は、maven-processor-plugin
を実行する前にコンパイル済みファイルを削除することです。例えば。:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId>
<executions>
<execution>
<id>clean-jpa-model</id>
<phase>generate-sources</phase>
<goals>
<goal>clean</goal>
</goals>
<configuration>
<filesets>
<fileset>
<directory>
${project.basedir}/src/main/Java
</directory>
<includes>
<include>**/model/*_.Java</include>
</includes>
</fileset>
</filesets>
<excludeDefaultDirectories>true</excludeDefaultDirectories>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<executions>
<!--precompilation to find annotations and classed needed by the maven processor plugin for hibernate-jpamodelgen-->
<execution>
<id>compile-maven-processor</id>
<goals>
<goal>compile</goal>
</goals>
<phase>process-sources</phase>
<configuration>
<showDeprecation>false</showDeprecation>
<showWarnings>false</showWarnings>
<includes>
<include>**/model/*.Java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.bsc.maven</groupId>
<artifactId>maven-processor-plugin</artifactId>
<version>3.3.3</version>
<executions>
<execution>
<id>generate-jpa-model</id>
<goals>
<goal>process</goal>
</goals>
<phase>generate-sources</phase>
<configuration>
<includes>
<include>**/model/*.Java</include>
</includes>
<processors>
<processor>org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor</processor>
</processors>
<outputDirectory>${project.basedir}/src/main/Java</outputDirectory>
</configuration>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jpamodelgen</artifactId>
<version>${hibernate.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>
</plugin>
MavenとJDK 1.8.0_121によってビルドおよびテストされたプロジェクトで同じエラーが発生しました。元の構成では、プロジェクトは最初にmvn clean
を介してクリーンアップされ、次にmvn install -projectSpecificParameters
を使用してビルドされ、最後に別のmvn install -otherProjectSpecificParameters
でテストされました。この構成により、質問に記載されているエラーが発生しました。
ステージの順序を変更し(最初にテストしてからビルド)、clean
ゴールをビルドコマンドに追加して、テスト後にビルドされた状態をクリーンアップした後、エラーは再現できなくなりました。
これが役立つかどうかはわかりません。私の場合、open-jdk
8u91
で同じ問題が発生しました。Oracle-jdkをインストールし、mvn clean compile
の後にプロジェクトを実行できました。問題は、実行ごとにJDKを切り替えて、Mavenでもう一度ビルドする必要があることでした。
[〜#〜] edit [〜#〜]:約2日間苦労した後、私は maven
およびjdk
。私のIDEは、maven 3.0.5をバンドルされたmavenとして使用していました。
ソリューション:IDEでは、Mavenホームディレクトリをbundled maven
から現在のバージョンに変更する必要があります例/usr/share/maven
。(私の場合、現在のバージョンは3.3.9)