2016-03-11 129 views
7

我有一個使用Dagger2並使用Maven構建的桌面Java項目。我無法順序運行compilepackage。這工作:Maven:編譯OK,包OK,編譯+包失敗

$ mvn clean 
$ mvn compile 

而這個工作,產生無差錯運行一個可執行的JAR:

$ mvn clean 
$ mvn package 

但這種失敗:

$ mvn clean 
$ mvn compile 
$ mvn package 

package到達使用Dagger2模塊它輸出:

[INFO] Changes detected - recompiling the module! 

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 

該模塊具有這種依賴性:

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

該模塊使用編譯器插件版本3.3這樣的:

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

這是唯一的匕首相關的配置。爲什麼我不能在build之後運行package

可能相關:我認爲forceJavacCompilerUse不再需要,但沒有它,匕首似乎根本沒有運行。生成的組件實現(DaggerMyComponent)上出現未知符號錯誤。

編輯:這是mvn -e package全力輸出,命令提示符命令提示符:

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

編輯2:我注意到,當我clean後通過自身運行package,它說,它的編譯6個來源。這是項目中有多少手寫課程。當我在package之前運行compile時,後者說它正在編譯8個源文件。它看起來像是在一個乾淨的項目上運行dagger-compiler時,它會靜靜地生成並編譯它的源代碼。然後package看到新的來源,並試圖編譯它們。神祕的是它失敗的原因。連續兩次運行compile以同樣的方式失敗。

編輯3:我試圖this answer,指定dagger.internal.codegen.ComponentProcessor作爲-processor參數。現在,我第一次運行編譯,我看到它編譯6個文件的兩個通道,然後8個文件:

[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 

這是預期,而這compile成功。但是,如果我再次運行packagecompile,則它會像以前一樣失敗。

匕首生產的來源在/target/generated-sources/annotations。我想我需要告訴Maven做這件事情,但我不知道該怎麼做。 compile在連續運行兩次時會檢測到源變化,但我不知道爲什麼會導致失敗。也許我需要有條件地運行註釋處理步驟,但我不知道該怎麼做或條件應該如何。

+0

你可以根據編譯錯誤消息顯示完整的錯誤輸出原因,必須有更多的輸出... – khmarbaise

+0

@khmarbaise這是完整的輸出。我唯一遺漏的是最後的「更多信息...」樣板。 –

+0

不是。在maven-compiler-plugin附近有輸出,它顯示了真正的問題,不僅僅是最後的部分... – khmarbaise

回答

3

我設法重現您的問題。

的關鍵似乎是maven-compiler-plugin:3.3

當我maven-compiler-plugin:3.1運行,則錯誤並不明顯。

+1

我甚至沒有想到它可能是編譯器插件中的一個錯誤。這聽起來與[這個問題]密切相關(https://issues.apache.org/jira/browse/MCOMPILER-236)。我確認它是在上個月剛剛發佈的3.5.1版中修復的。 –