2015-08-08 78 views
3

使用Maven 3.3.1時,我的Maven構建失敗,但使用Maven 3.2.2成功。爲什麼Maven 3.3不包含'javax.inject'但是Maven 3.2呢?

到目前爲止,我已經運行了/path/to/3.3.1/mvn clean compile -X並將輸出與/path/to/3.2.2/mvn clean compile -X所產生的輸出相比較。

有恰好一個在以下塊中的maven-compiler-plugin/default-compile相位內差:

[DEBUG] Populating class realm plugin>org.apache.maven.plugins:maven-compiler-plugin:3.2 
[DEBUG] Included: org.apache.maven.plugins:maven-compiler-plugin:jar:3.2 
[DEBUG] Included: com.google.dagger:dagger-compiler:jar:2.0 
[DEBUG] Included: com.google.dagger:dagger:jar:2.0 
[DEBUG] Included: com.google.dagger:dagger-producers:jar:2.0-beta 
[DEBUG] Included: com.google.guava:guava:jar:18.0 
... 

差異:雖然Maven的3.2.2印刷[DEBUG] Included: javax.inject:javax.inject:jar:1,它缺少對Maven 3.3.1。

我不知道這是否會有所幫助,但是這是我的有效生成插件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.2</version> <!-- 3.3 respectively --> 
    <dependencies> 
     <dependency> 
      <groupId>com.google.dagger</groupId> 
      <artifactId>dagger-compiler</artifactId> 
      <version>2.0</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <source>1.8</source> 
     <target>1.8</target> 
     <!-- workaround for http://jira.codehaus.org/browse/MCOMPILER-202 --> 
     <forceJavacCompilerUse>true</forceJavacCompilerUse> 
    </configuration> 
</plugin> 

我不明白:究竟是什麼的「填充類境界插件」嗎?爲什麼缺少一個jar,即使它已被兩個maven版本識別爲依賴項?

編輯:構建失敗與此異常:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project ui: Compilation failure -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on project ui: Compilation failure 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) 
    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:116) 
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) 
    at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) 
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) 
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:862) 
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:286) 
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:197) 
    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:497) 
    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:913) 
    at org.apache.maven.plugin.compiler.CompilerMojo.execute(CompilerMojo.java:129) 
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) 
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
    ... 20 more 

小例子項目可以用GitHub。 失敗命令的完整輸出可用here

+0

如果您可以說明實際的構建錯誤是什麼,將會有所幫助。在你的問題中沒有任何東西可以建議'javax.inject'的區別是你構建失敗的原因。 –

+0

增加了異常,即使它只是一個通用的編譯錯誤堆棧跟蹤 –

回答

3

問題不在於maven-compiler-plugin的版本。
當您使用選項forceJavacCompilerUse它將基本上在您的JDK中使用javax.tool API實現。
由於您使用的是匕首編譯器,這是實習生依賴於javax.inject,它應該被拉。

您可以嘗試爲您的dagger-compiler插件依賴項添加[provided] scope,這樣您將鎖定所有傳遞依賴項。

另外請確保您已添加匕首 依賴於您的運行時依賴關係。

請提供異常堆棧跟蹤和其他相關領域的一些更詳細的信息,這將有助於遊客縮小問題範圍並指導您快速!

+0

我添加了一個最小的項目來重現此問題以及完整的日誌文件。堆棧跟蹤已經完成。在提供的作用域中添加'dagger-compiler'依賴項不會改變任何內容: -/ –

+0

使用提供的作用域添加dagger-compiler _and_使用javax.tools編譯器解決了這個問題。我只是將我更新的pom.xml推送到我的問題中提到的GitHub項目。它現在正在工作,但我不明白爲什麼它不能用作構建插件依賴項。如果添加一些關於javax.tools和javac編譯器的內容,以及插件依賴關係與項目依賴關係的不同之處,我會接受這個答案。 –

+0

嗨塞巴斯蒂安,我已經克隆了您的示例項目,並試圖在我的機器上構建,並且構建正常。這是我使用的[pom](https://github.com/iNithya/daggerfx/blob/master/pom.xml)。這裏是[部分調試日誌](https://gist.github.com/iNithya/6ccb1a387b32d3946040)和[信息日誌](https://gist.github.com/iNithya/0ce4c1c4878a81072c1a)。 – Nithya

相關問題