gpt4 book ai didi

java - 为什么 Maven 3.3 不包含 'javax.inject' 但 Maven 3.2 包含?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:42:18 24 4
gpt4 key购买 nike

我的 Maven 构建在使用 Maven 3.3.1 时失败,但在 Maven 3.2.2 中成功。

到目前为止,我已经运行了 /path/to/3.3.1/mvn clean compile -X 并将输出与 /path/to/3.2.2/生成的输出进行了比较mvn clean compile -X.

maven-compiler-plugin/default-compile 阶段的以下 block 中恰好有 一个 差异:

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

我不明白的是:“Populating class realm 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 .

最佳答案

问题不在于maven-compiler-plugin的版本。
当您使用选项 forceJavacCompilerUse 时,它基本上会在您的 JDK 中使用 javax.tool API 实现。
由于您使用的是 dagger-compiler,它依赖于 javax.inject,因此它应该被拉出。

您可以尝试为您的 dagger-compiler 插件依赖项添加[provided] 范围,这样您将锁定所有传递依赖项。

还要确保你已经添加了dagger 运行时依赖项中的依赖项。

请提供有关异常堆栈跟踪和 pom 其他相关区域的更多详细信息,以帮助访问者缩小问题范围并快速指导您!

关于java - 为什么 Maven 3.3 不包含 'javax.inject' 但 Maven 3.2 包含?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31896462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com