Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么gradle没有加载其中一个依赖项的可传递依赖项? 更新问题_Java_Maven_Gradle_Pom.xml - Fatal编程技术网

Java 为什么gradle没有加载其中一个依赖项的可传递依赖项? 更新问题

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

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 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
问题
  • 它就像黑客一样工作,但需要任何真正的修复
  • 查看我的项目所需的其他jar,它们在META-INF>maven>lib name folder hierarchy>pom.xml中定义了依赖项,但这个guice-3.0.jar在META-INF>dependencies文件中定义了依赖项。这种不同的惯例会引起任何问题吗

  • 原始问题 对于我的一个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,它似乎不包含在依赖项中

  • 有什么解决办法吗
  • 有什么方法可以回滚“刷新依赖项”命令吗
  • 有什么解决办法吗
  • 我执行了cleanEclipse,eclipse,将gradle升级到3.5,然后降级到2.14.1,但运气不好


    向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