这里是gradle和java的新手,我正在尝试使用android.util.Log中的Android的Log方法。看起来我可以编译它找到它需要的东西,但它在运行时找不到它。我尝试在依赖项部分使用'runtime'而不是'compile',但不是运气。
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
apply plugin: 'java'
dependencies {
compile files('../androidsdk/platforms/android-25/android.jar')
}
jar {
manifest {
attributes 'Main-Class': 'myproject.test.Main'
}
}
答案 0 :(得分:0)
您正在尝试运行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。编译中的所有内容也将包含在运行时配置中。