2016-03-11 11 views
7

Ho un progetto Java desktop che utilizza Dagger2 e lo sviluppo con Maven. Non riesco a eseguire compile e package in sequenza. Questo funziona:Maven: compila OK, pacchetto OK, compile + pacchetto fallisce

$ mvn clean 
$ mvn compile 

E questo funziona, producendo un jar eseguibile che viene eseguito senza errori:

$ mvn clean 
$ mvn package 

Ma questo non riesce:

$ mvn clean 
$ mvn compile 
$ mvn package 

Quando package ottiene al modulo che utilizza Dagger2 , emette:

[INFO] Changes detected - recompiling the module! 

L'errore da mvn -e package è:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project weapon: Compilation failure -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project weapon: Compilation failure 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure 
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:915) 
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    ... 19 more 

Il modulo è dotato di questa dipendenza:

<dependency> 
    <groupId>com.google.dagger</groupId> 
    <artifactId>dagger</artifactId> 
    <version>2.1</version> 
    <scope>compile</scope> 
</dependency> 

Il modulo utilizza compilatore plug versione 3.3 in questo modo:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <dependencies> 
     <dependency> 
      <groupId>com.google.dagger</groupId> 
      <artifactId>dagger-compiler</artifactId> 
      <version>2.1</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <source>1.7</source> 
     <target>1.7</target> 
     <forceJavacCompilerUse>true</forceJavacCompilerUse> 
    </configuration> 
</plugin> 

Questo è l'unico Dagger configurazione correlata. Perché non è possibile eseguire package dopo il build?

Probabilmente correlato: pensavo che lo forceJavacCompilerUse non fosse più necessario, ma senza di esso, Dagger non sembra funzionare affatto. Ricevo un errore di simbolo sconosciuto sull'implementazione del componente generato (DaggerMyComponent).

Edit: Questa è l'uscita piena di mvn -e package, Prompt dei comandi al prompt dei comandi:

[email protected]:~/Projects/IDEA/Dark Matter$ mvn -e package 
[INFO] Error stacktraces are turned on. 
[INFO] Scanning for projects... 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Build Order: 
[INFO] 
[INFO] parent 
[INFO] weapon 
[INFO] scripts 
[INFO] assembly 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building parent 2.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building weapon 2.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ weapon --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 1 resource 
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ weapon --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 8 source files to /home/kevin/Projects/IDEA/Dark Matter/weapon/target/classes 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] parent ............................................ SUCCESS [0.001s] 
[INFO] weapon ............................................ FAILURE [1.641s] 
[INFO] scripts ........................................... SKIPPED 
[INFO] assembly .......................................... SKIPPED 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1.735s 
[INFO] Finished at: Fri Mar 11 04:32:38 MST 2016 
[INFO] Final Memory: 21M/173M 
[INFO] ------------------------------------------------------------------------ 
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project weapon: Compilation failure -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.3:compile (default-compile) on project weapon: Compilation failure 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
Caused by: org.apache.maven.plugin.compiler.CompilationFailureException: Compilation failure 
    at org.apache.maven.plugin.compiler.AbstractCompilerMojo.execute(AbstractCompilerMojo.java:915) 
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) 
    ... 19 more 
[ERROR] 
[ERROR] Re-run Maven using the -X switch to enable full debug logging. 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles: 
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException 
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command 
[ERROR] mvn <goals> -rf :weapon 
[email protected]:~/Projects/IDEA/Dark Matter$ 

Edit 2: Ho notato che quando ho eseguito package da solo dopo clean, si dice che è la compilazione 6 fonti. Ecco quante sono le classi scritte a mano nel progetto. Quando eseguo prima del package, quest'ultimo dice che sta compilando 8 fonti. Sembra che quando dagger-compiler viene eseguito su un progetto pulito, esso genera e compila silenziosamente le sue origini. Quindi package vede le nuove fonti e prova a compilarle. Il mistero è il motivo per cui fallisce. L'esecuzione di compile due volte consecutive fallisce allo stesso modo.

Edit 3: Ho provato this answer, specificando dagger.internal.codegen.ComponentProcessor come argomento -processor. Ora la prima volta che corro compilazione, vedo i due passaggi in cui si compila 6 file e poi 8 file:

[INFO] --- maven-compiler-plugin:3.3:compile (process-annotations) @ weapon --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 6 source files to /home/kevin/Projects/IDEA/Dark Matter/weapon/target/classes 
[INFO] 
[INFO] --- maven-resources-plugin:2.3:resources (default-resources) @ weapon --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 1 resource 
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @ weapon --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 8 source files to /home/kevin/Projects/IDEA/Dark Matter/weapon/target/classes 

questo è previsto, e questo compile riesce. Ma se eseguo ancora package o compile, fallisce lo stesso di prima.

Le sorgenti prodotte da Dagger si trovano in /target/generated-sources/annotations. Penso di dover dire a Maven di fare qualcosa con quel percorso, ma non so cosa. È logico che compile rilevi le modifiche all'origine quando viene eseguito due volte di seguito, anche se non so perché ciò porti a un errore.Forse ho bisogno di eseguire il passaggio di elaborazione delle annotazioni in modo condizionale, ma non so come farlo o quale dovrebbe essere la condizione.

+0

È possibile visualizzare la causa dell'errore completo in base al messaggio di errore di compilazione deve esserci più output ... – khmarbaise

+0

@khmarbaise Questo è l'output completo. L'unica cosa che ho tralasciato è la frase "Per ulteriori informazioni ..." alla fine. –

+0

Non lo è. C'è un output vicino al plugin-compilatore-maven che mostra il vero problema e non solo la parte alla fine ... – khmarbaise

risposta

3

Sono riuscito a riprodurre il problema.

La chiave sembra essere la maven-compiler-plugin:3.3

Quando eseguo con maven-compiler-plugin:3.1, l'errore non si manifesta.

+1

Non mi è nemmeno venuto in mente che potrebbe essere un bug nel plugin del compilatore. Sembra strettamente correlato a [questo problema] (https://issues.apache.org/jira/browse/MCOMPILER-236). Ho confermato che è stato risolto nella versione 3.5.1, che è stata appena rilasciata il mese scorso. –

Problemi correlati