web-dev-qa-db-ja.com

java.lang.IllegalStateException:endPosTableはすでに設定されています

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フレームワークを引き続き使用できるようにしたいと思います。

16
apil.tamang

この問題はバグレポート JDK-8067747

Jan Lahodaによって)

私の知る限り、このバグには2つの側面があります。

  1. 例外でクラッシュするjavacバグ。私はこれに取り組んでいますが、これが修正された場合、javacは入力をコンパイルしないことに注意してください。ファイラーから適切な例外がスローされます(以下を参照)。

  2. mavenバグのように見えるもの:プロジェクトが「クリーンインストール」でコンパイルされると、注釈プロセッサがソースファイルを「target/generated-sources/annotations」に生成します。インクリメンタルコンパイルが完了すると、この生成されたファイルは入力としてjavacに渡され、注釈プロセッサは再度生成を試みますが、これは許可されていません。

これは、mavenのバグが修正されると、不適切な例外を伴う問題を報告するというjavacのバグが無関係になることを意味します。ただし、Maven 2の実際のサポート終了日を考えると、その修正またはパッチが見つかるとは思えません。

13
Holger

この問題 で説明されているように、回避策は seIncrementalCompilation を無効にすることです:

<plugin>
    <artifactId>maven-compiler-plugin</artifactId>

    <configuration>
        <useIncrementalCompilation>false</useIncrementalCompilation>
    </configuration>
</plugin>
5
laffuste

私の場合、これは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>    
0
k_o_

MavenとJDK 1.8.0_121によってビルドおよびテストされたプロジェクトで同じエラーが発生しました。元の構成では、プロジェクトは最初にmvn cleanを介してクリーンアップされ、次にmvn install -projectSpecificParametersを使用してビルドされ、最後に別のmvn install -otherProjectSpecificParametersでテストされました。この構成により、質問に記載されているエラーが発生しました。

ステージの順序を変更し(最初にテストしてからビルド)、cleanゴールをビルドコマンドに追加して、テスト後にビルドされた状態をクリーンアップした後、エラーは再現できなくなりました。

0
zovits

これが役立つかどうかはわかりません。私の場合、open-jdk8u91で同じ問題が発生しました。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)

0
Oxobo