web-dev-qa-db-de.com

java.lang.IllegalStateException: endPosTable ist bereits festgelegt

Versuch, eine Alexa (Amazon: Echo) -Fachkombination aufzubauen. Versuchen Sie gleichzeitig, diese Erfahrung als lernende Testumgebung für die Abhängigkeitsinjektion über Dolch 2 zu verwenden. Erstellen Sie jedoch das Paket mit maven-2 cmd:

mvn Assembly:assembly -DdescriptorId=jar-with-dependencies package'. 

wenn Sie eine Zip-Dose mit den vollständigen Abhängigkeiten generieren, wird die folgende Ausnahme-Ablaufverfolgung erzeugt:

[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)

Die anfängliche Kompilierung läuft gut und alle Tests werden ausgeführt und erfolgreich ausgeführt. Ich habe das Gefühl, dass es beim 'Verknüpfen' der Abhängigkeiten ist, dass die Dinge nach Süden gehen. Schauen Sie sich bitte this file an, um die Konsolenausgabe während des Builds zu sehen.

Meine Frage ist, ob es einen Versuch wert ist, die Abhängigkeiten auf andere Weise zu erzeugen. Ich weiß nicht viel über Maven zu diesem Zweck. Gibt es einen Patch oder etwas, das verwendet werden kann? Denken Sie, dass es sogar möglich ist, eine Problemumgehung zu finden? Ich möchte den Dolch 2-Rahmen weiterhin für die Erstellung dieses Projekts verwenden können. 

13
apil.tamang

Das Problem ist im Fehlerbericht beschrieben JDK-8067747 :

( von Jan Lahoda )

Meines Wissens gibt es zwei Aspekte dieses Fehlers:

  1. der Javac-Fehler, dass er mit einer Ausnahme abstürzt. Ich arbeite daran, aber bitte beachten Sie, dass javac die Eingabe nicht kompiliert, wenn dies behoben ist. Es wird eine entsprechende Ausnahme vom Filer ausgelöst (siehe unten).

  2. was scheint ein Maven-Fehler zu sein: Wenn das Projekt mit "Neuinstallation" kompiliert wird, generiert ein Anmerkungsprozessor eine Quelldatei in "Ziel/Generierte-Quellen/Anmerkungen". Wenn die inkrementelle Kompilierung abgeschlossen ist, wird diese generierte Datei als Eingabe an javac übergeben und der Anmerkungsprozessor versucht erneut, sie zu generieren, was nicht zulässig ist.

Dies bedeutet, dass bei der Behebung des Maven-Fehlers der javac-Fehler beim Melden des Problems mit einer unangemessenen Ausnahme irrelevant wird. Angesichts des tatsächlichen Endes von Maven 2 am Ende des Lebens bezweifle ich jedoch, dass Sie davon ausgehen können, dass Sie ein Update oder einen Patch dafür finden.

11
Holger

Wie in diesem Problem erläutert, besteht eine Problemumgehung darin, useIncrementalCompilation zu deaktivieren:

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

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

In meinem Fall geschah dies beim Generieren von JPA-Metadatendateien mit dem Befehl maven-processor-plugin Plug-In. Ich habe die Dateien nur einmal mit einem speziellen Maven-Profil erstellt und sie dem Quellordner hinzugefügt.

Wie im Fehlerbericht angegeben, geschieht dies, wenn eine vorhandene Datei erneut kompiliert werden soll. Die Lösung ist das Löschen der kompilierten Dateien vor dem maven-processor-plugin Ausführung. Z.B.:

<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_

Der gleiche Fehler ist bei einem Projekt aufgetreten, das von Maven und JDK 1.8.0_121 erstellt und getestet wurde. In der ursprünglichen Konfiguration wurde das Projekt zuerst mit mvn clean gereinigt, dann mit mvn install -projectSpecificParameters erstellt und anschließend mit einem separaten mvn install -otherProjectSpecificParameters getestet. Diese Konfiguration führte zu dem in der Frage genannten Fehler.

Nach dem Ändern der Reihenfolge der Stufen (zuerst testen und dann erstellen) und dem Buildbefehl ein clean-Ziel hinzugefügt, um den Erstellungszustand nach den Tests zu bereinigen, war der Fehler nicht mehr reproduzierbar.

0
zovits

Ich bin mir nicht sicher, ob das helfen kann. Für meinen Fall hatte ich das gleiche Problem mit open-jdk8u91, ich installierte Oracle-jdk und konnte das Projekt nach mvn clean compile ausführen. Das Problem war, ich musste zwischen den JDKs für jeden Lauf wechseln und es erneut mit Maven erstellen.

EDIT: Nachdem ich mich zwei Tage damit herumgekämpft hatte, stellte ich fest, dass es ein Ergebnis von Nichtübereinstimmung zwischen maven und jdk ist. Mein IDE verwendete Maven 3.0.5 als gebündelten Maven.

Lösung : In Ihrem IDE sollten Sie Ihr Maven-Home-Verzeichnis von bundled maven in Ihre aktuelle Version ändern, zum Beispiel/usr/share/maven. (für mich war die aktuelle Version 3.3.9)  

0
Oxobo