我的gradle构建文件是
plugins {
// Apply the java plugin to add support for Java
id 'java'
// Apply the application plugin to add support for building a CLI application
id 'application'
}
apply plugin: 'java'
jar {
from configurations.runtime
manifest {
attributes(
'Created-By':'Gmack',
'Main-Class':'myapprunner.App',
'Class-Path':'mydaos-1.0.jar'
)
}
}
allprojects{
repositories {
jcenter()
}
}
subprojects {
version = '1.0'
apply plugin: 'java'
}
dependencies {
// This dependency is used by the application.
implementation 'com.google.guava:guava:27.1-jre'
// Use JUnit test framework
testImplementation 'junit:junit:4.12'
// Compile Project for dependency
compile project(':mydaos')
}
application {
// Define the main class for the application
mainClassName = 'myapprunner.App'
}
当我使用java -jar myapprunner.jar
我得到一个ClassNotFoundException
Caused by: java.lang.ClassNotFoundException: com.mydaos.Library
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 1 more
我可以确认罐子已经装好了。不知道为什么这没把事情捡起来。
任何帮助将不胜感激。
谢谢
答案 0 :(得分:1)
插件java
被应用了两次,并且com.mydaos.Library
很可能从compile project(':mydaos')
(或'Class-Path':'mydaos-1.0.jar'
)中被拉出。假设项目没有建立或类路径错误。
答案 1 :(得分:0)
依赖项类(项目/外部jar)默认情况下不打包在jar中。
您正在使用应用程序插件,该插件将您的类,依赖项和执行脚本捆绑在zip中,因此您应该使用它。该插件还向您的项目添加了一个“运行”任务,以便通过gradle运行您的主类以进行开发。有关更多信息,请参见application plugin docs
如果要将依赖项打包到jar(称为uber jar)中,请参见here。我建议您停止使用应用程序插件
'Class-Path':'mydaos-1.0.jar'
这假设mydaos-1.0.jar
与您正在运行的java -jar ...
位于同一文件夹中,