Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.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
Gradle依赖项问题,java.lang.NoClassDefFoundError,但编译_Java_Exception_Gradle_Build - Fatal编程技术网

Gradle依赖项问题,java.lang.NoClassDefFoundError,但编译

Gradle依赖项问题,java.lang.NoClassDefFoundError,但编译,java,exception,gradle,build,Java,Exception,Gradle,Build,这里是gradle和java的新手,我正在尝试从Android.util.Log使用Android的Log方法。看起来我可以编译,它可以找到它需要的东西,但它在运行时找不到。在依赖项部分,我尝试使用“运行时”而不是“编译”,但运气不好 java -jar build/libs/testJavaHttp.jar Exception in thread "main" java.lang.NoClassDefFoundError: android/util/Log at myproj

这里是gradle和java的新手,我正在尝试从Android.util.Log使用Android的Log方法。看起来我可以编译,它可以找到它需要的东西,但它在运行时找不到。在依赖项部分,我尝试使用“运行时”而不是“编译”,但运气不好

java -jar build/libs/testJavaHttp.jar

Exception in thread "main" java.lang.NoClassDefFoundError: android/util/Log
        at myproject.test.HttpToFile.downloadFile(HttpToFile.java:20)
        at myproject.test.Main.main(Main.java:12)
Caused by: java.lang.ClassNotFoundException: android.util.Log
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 2 more

内建gradle
如果您试图运行jar,而jar中没有打包依赖项,请通过扩展jar任务,使用shadow jar插件或打包所需的工件

jar {
    archiveName = 'Name.jar'

    manifest {
         attributes 'Main-Class': 'myproject.test.Main',
                'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' '),
                'Implementation-Version': 1.0
    }

    from(configurations.myconfig.collect { it.isDirectory() ? it : zipTree(it) }) {
           // in here you can exclude what you need as well if needed.
           }
}
要避免将“整个世界”拉入一个jar,您可以仅使用所需的库创建配置:

configurations{
    myconfig // to create configuration
    compile.extendsFrom(myConfig) //to include it in compile as well
}
然后在jar创建和dependecies中使用此配置

dependencies {
    myconfig files('../androidsdk/platforms/android-25/android.jar')
}
但是看看你的代码,没有太多的东西可以借鉴。如果你希望它是一个可运行的jar,你需要考虑打包所有需要的工件和传输,因为你用“java -jar……”命令运行它。


PS.编译中的所有内容都将包含在运行时配置中。

如果您试图运行jar,而jar中没有包含依赖项,请使用shadow jar插件或通过扩展jar任务将所需的工件打包到中

jar {
    archiveName = 'Name.jar'

    manifest {
         attributes 'Main-Class': 'myproject.test.Main',
                'Class-Path': configurations.runtime.files.collect { "lib/$it.name" }.join(' '),
                'Implementation-Version': 1.0
    }

    from(configurations.myconfig.collect { it.isDirectory() ? it : zipTree(it) }) {
           // in here you can exclude what you need as well if needed.
           }
}
要避免将“整个世界”拉入一个jar,您可以仅使用所需的库创建配置:

configurations{
    myconfig // to create configuration
    compile.extendsFrom(myConfig) //to include it in compile as well
}
然后在jar创建和dependecies中使用此配置

dependencies {
    myconfig files('../androidsdk/platforms/android-25/android.jar')
}
但是看看你的代码,没有太多的东西可以借鉴。如果你希望它是一个可运行的jar,你需要考虑打包所有需要的工件和传输,因为你用“java -jar……”命令运行它。


PS.编译中的所有内容都将包含在运行时配置中。

您的IDE可以编译,但您的Gradle不能,因为您没有指定您的类路径。如果未使用IDE,则可能会使用您可以检查的选项,下面是构建调试消息。注意类路径。。。。18:41:36.330[调试][org.gradle.api.internal.tasks.compile.normalizationjavacompiler]编译器参数:-source 1.8-target 1.8-d/Users/myname/dev/testJavaHttp/build/classes/main-g-sourcepath-proc:none-XDuseUnsharedTable=true-classpath/Users/myname/dev/androidsdk/platforms/android-25/android.jar/Users/myname/dev/testJavaHttp/src/main/java/myproject/test/HttpToFile.java/Users/myname/dev/testJavaHttp/src/main/java/myproject/test/main.java添加属性“类路径”:“../androidsdk/platforms/android-25/android.jar”似乎也不起作用。您的IDE可以编译,但您的Gradle不能,因为您没有指定您的类路径。如果未使用IDE,则可以检查,这是构建调试消息。注意类路径。。。。18:41:36.330[调试][org.gradle.api.internal.tasks.compile.normalizationjavacompiler]编译器参数:-source 1.8-target 1.8-d/Users/myname/dev/testJavaHttp/build/classes/main-g-sourcepath-proc:none-XDuseUnsharedTable=true-classpath/Users/myname/dev/androidsdk/platforms/android-25/android.jar/Users/myname/dev/testJavaHttp/src/main/java/myproject/test/HttpToFile.java/Users/myname/dev/testJavaHttp/src/main/java/myproject/test/main.java添加属性“类路径”:“../androidsdk/platforms/android-25/android.jar”似乎也不起作用。线程“main”java.lang.RuntimeException中的异常:存根!在myproject.test.Main.Main(Main.java:12)的myproject.test.HttpToFile.downloadFile(HttpToFile.java:20)的android.util.Log.d(Log.java:23)中,这似乎也将整个世界拉入了困境。您现在遇到的错误是另一个错误,可能是您的代码问题,您所发布的问题应该通过我建议的解决方案进行修复,您可以进一步调查它在您的主应用程序中失败的原因和原因。我更新了答案,给出了一个不把“整个世界”拉进罐子的例子。线程“main”java.lang.RuntimeException中的异常:存根!在myproject.test.Main.Main(Main.java:12)的myproject.test.HttpToFile.downloadFile(HttpToFile.java:20)的android.util.Log.d(Log.java:23)中,这似乎也将整个世界拉入了困境。您现在遇到的错误是另一个错误,可能是您的代码问题,您所发布的问题应该通过我建议的解决方案进行修复,您可以进一步调查它在您的主应用程序中失败的原因和原因。我更新了答案,给出了一个不将“整个世界”放入罐子的例子。