Java 为什么gradle没有加载其中一个依赖项的可传递依赖项? 更新问题
gradle正在加载我的项目的依赖项guice-3.0.jar,但gradle没有加载guice的依赖项 guice-3.0.jar>META-INF>依赖项(文件)包含以下内容:Java 为什么gradle没有加载其中一个依赖项的可传递依赖项? 更新问题,java,maven,gradle,pom.xml,Java,Maven,Gradle,Pom.xml,gradle正在加载我的项目的依赖项guice-3.0.jar,但gradle没有加载guice的依赖项 guice-3.0.jar>META-INF>依赖项(文件)包含以下内容: // ------------------------------------------------------------------ // Transitive dependencies of this project determined from the // maven pom organized by
// ------------------------------------------------------------------
// Transitive dependencies of this project determined from the
// maven pom organized by organization.
// ------------------------------------------------------------------
Google Guice - Core Library
From: 'an unknown organization'
- AOP alliance (http://aopalliance.sourceforge.net) aopalliance:aopalliance:jar:1.0
License: Public Domain
- javax.inject (http://code.google.com/p/atinject/) javax.inject:javax.inject:jar:1
License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
- CGLIB (http://sourceforge.net/projects/cglib/) org.sonatype.sisu.inject:cglib:jar:2.2.1-v20090111
License: The Apache Software License, Version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.txt)
From: 'ObjectWeb' (http://www.objectweb.org/)
- ASM Core (http://asm.objectweb.org/asm/) asm:asm:jar:3.1
gradle似乎无法加载javax.inject。因此,我得到了下面提到的错误
变通
我将guice的依赖项直接添加到项目的build.gradle中
compile group: 'aopalliance', name: 'aopalliance', version: 1.0
compile group: 'javax.inject', name: 'javax.inject', version: 1
compile group: 'org.sonatype.sisu.inject', name: 'cglib', version: '2.2.1-v20090111'
compile group: 'asm', name: 'asm', version: 3.1
问题
原始问题 对于我的一个java项目,我执行了
gradlew--refresh dependencies
,项目构建compileJava
任务开始抛出以下错误:
:myproject:compileJava
/<path-to-my-project/MyProvider.java:24: error: cannot access Provider
public class MyProvider<T> implements Provider<T> {
^
class file for javax.inject.Provider not found
An exception has occurred in the compiler (1.8.0_181). Please file a bug against the Java compiler via the Java bug reporting page (http://bugreport.java.com) after checking the Bug Database (http://bugs.java.com) for duplicates. Include your program and the following diagnostic in your report. Thank you.
java.lang.NullPointerException
at com.sun.tools.javac.comp.Attr.visitTypeParameter(Attr.java:4016)
at com.sun.tools.javac.tree.JCTree$JCTypeParameter.accept(JCTree.java:2224)
at com.sun.tools.javac.comp.Attr.attribTree(Attr.java:576)
at com.sun.tools.javac.comp.Attr.attribStat(Attr.java:645)
at com.sun.tools.javac.comp.Attr.attribStats(Attr.java:661)
at com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:4296)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4272)
at com.sun.tools.javac.comp.Attr.attribClass(Attr.java:4201)
at com.sun.tools.javac.comp.Attr.attrib(Attr.java:4176)
at com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1248)
at com.sun.tools.javac.main.JavaCompiler.compile2(JavaCompiler.java:901)
at com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:860)
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)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:46)
at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:33)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors(NormalizingJavaCompiler.java:104)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:53)
at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute(NormalizingJavaCompiler.java:38)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:35)
at org.gradle.api.internal.tasks.compile.CleaningJavaCompilerSupport.execute(CleaningJavaCompilerSupport.java:25)
at org.gradle.api.tasks.compile.JavaCompile.performCompilation(JavaCompile.java:163)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:145)
at org.gradle.api.tasks.compile.JavaCompile.compile(JavaCompile.java:93)
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.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:75)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.doExecute(AnnotationProcessingTaskFactory.java:245)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:221)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$IncrementalTaskAction.execute(AnnotationProcessingTaskFactory.java:232)
at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:210)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:66)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:203)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:185)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:66)
at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:50)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
:myproject:compileJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':myproject:compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
这是openJDK
嗯,我的队友们,他们没有执行过gradlew--refresh dependencies,他们没有面临这样的问题。我不认为这是java编译器的问题,但似乎是gradle的问题
当我使用eclipse检查时,MyProvider.java引用guice-3.0.jar中的com.google.inject.Provider
com.google.inject.Provider是指javax.inject.Provider,它似乎不包含在依赖项中
向java报告了类似的问题,但由于无法重现,该问题被关闭:。您是否尝试将
javax.inject:javax.inject:1
添加到依赖项中?@BjørnVester,是的,将这些依赖项直接添加到我的项目工作中,但我想gradle应该注意这一点。我更新了我的问题,询问如何强制gradle处理依赖项的依赖项。gradle不使用META-INF中的元数据文件,如dependencies
和pom.xml
来解析依赖项。我甚至不认为Maven使用嵌入式的。相反,存储库中jar文件旁边应该有一个pom文件。我见过一些组织拥有自己的Maven存储库,它们在其中手动上载库,但会破坏原始pom文件,从而破坏所需的可传递依赖项。也许你可以看看你的情况是否如此?@BjørnVester,是的,我们有自己的Maven存储库。guice jar是从以下位置引用的:~/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/3.0/9d84f15fe35e2c716a02979fb62f50a29f38aefa/guice-3.0.jar。我查看了当前POM文件的位置:~/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/3.0/5A1068122BA3584F77006351BFAD65F302BCC/guice-3.0.POM。它不包含任何关于依赖项的标记/信息。而早期的guice-3.0.pom确实包含关于依赖项的标记/信息。这就是问题吗?是的,这看起来是个问题。如果您可以找到对公司存储库的依赖关系,pom文件可能在那里是空的,这将是一个错误。最好的解决方案是修复存储库中的pom文件,然后使用--刷新依赖项
运行构建。如果这是不可能的,并且您的公司策略允许,您可以将依赖项配置为从Maven Central或JCenter加载。如果这也不可能,我想你别无选择,只能像以前那样解决每个消费项目中的问题……你是否尝试过将javax.inject:javax.inject:1
添加到依赖项中?@BjørnVester,是的,将这些依赖项直接添加到我的项目中,但我想,格雷德尔应该负责这件事。我更新了我的问题,询问如何强制gradle处理依赖项的依赖项。gradle不使用META-INF中的元数据文件,如dependencies
和pom.xml
来解析依赖项。我甚至不认为Maven使用嵌入式的。相反,存储库中jar文件旁边应该有一个pom文件。我见过一些组织拥有自己的Maven存储库,它们在其中手动上载库,但会破坏原始pom文件,从而破坏所需的可传递依赖项。也许你可以看看你的情况是否如此?@BjørnVester,是的,我们有自己的Maven存储库。guice jar是从以下位置引用的:~/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/3.0/9d84f15fe35e2c716a02979fb62f50a29f38aefa/guice-3.0.jar。我查看了当前POM文件的位置:~/.gradle/caches/modules-2/files-2.1/com.google.inject/guice/3.0/5A1068122BA3584F77006351BFAD65F302BCC/guice-3.0.POM。它不包含任何关于依赖项的标记/信息。而早期的guice-3.0.pom确实包含关于依赖项的标记/信息。这就是问题吗?是的,这看起来是个问题。如果您可以找到对公司存储库的依赖关系,pom文件可能在那里是空的,这将是一个错误。最好的解决方案是修复存储库中的pom文件,然后使用--刷新依赖项
运行构建。如果这是不可能的,并且您的公司策略允许,您可以将依赖项配置为从Maven Central或JCenter加载。如果这也不可能,我认为你没有其他选择,只能像你已经做的那样解决每个消费项目中的问题。。。
------------------------------------------------------------
Gradle 2.14.1
------------------------------------------------------------
Build time: 2016-07-18 06:38:37 UTC
Revision: d9e2113d9fb05a5caabba61798bdb8dfdca83719
Groovy: 2.4.4
Ant: Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM: 1.8.0_181 (Oracle Corporation 25.181-b13)
OS: Mac OS X 10.12.6 x86_64