gpt4 book ai didi

gradle - 无法执行从gradle构建的jar文件(包含依赖项)

转载 作者:行者123 更新时间:2023-12-03 05:16:46 25 4
gpt4 key购买 nike

我是gradle的新手,我正在尝试构建一个依赖于其他jar文件的java文件。它正在正确构建,但是当我尝试执行它时,它给出了“NoClassDefinitionFoundError”。

我的build.gradle文件是:

apply plugin : 'java'


jar {
manifest {
attributes 'Main-Class': 'Hey'
}
}


dependencies
{
compile files('lib/BuildBasicJavaProject.jar') ------line A
}

如果我删除了上面的 行A ,那么它甚至都没有构建项目。
如果我将 行保留为行,那么它可以正确构建并生成jar文件,但是当我使用,
java -jar jarfilename.jar

那么它给了我一个NoClassDefinitionFoundError。

运行jar文件时,我需要在哪里指定依赖路径?

可能是一个基本的疑问,但我已经浪费了2天了,我尝试给
1)依赖文件的绝对路径

2)添加以下行,
runtime files('lib/BuildBasicJavaProject.jar')

但是没有成功。

提前致谢

最佳答案

首先欢迎来到Gradle世界。
您的Gradle脚本似乎是正确的。当您具有依赖项时,一个jar依赖于另一个jar,就像您在编译时的情况一样,您可以像定义时那样定义编译时依赖项。因此,如果需要此jar来运行它,则需要运行时依赖项。但是Gradle会自动将您所有的编译时相关性都设为运行时相关性。因此,您无需明确指定它们。

那么为什么您的代码无法正常工作呢?

如果使用- jar 选项,则将classpath(-cp)选项设置为,而忽略。因此,在键入jar时不能使用-cp指定从属jar。因此,如果在Windows上,则必须编写

java -cp myJar.jar;.\lib\BuildBasicJavaProject.jar Hey

或在Linux中使用(:)和斜杠(/)。

其中 是您的主类的全称呼名称,必须在 list 中进行定义。

因此,如果您的类(class)Hey在包中: com.alabala.dev ,它的名称是 ,它的完全限定名称是com.alabala.dev.Hey。所以你必须告诉Gradle
mainClassName = "com.alabala.dev.Hey"

因此,现在Gradle将其放在 list 中,当您尝试在JVM中加载此jar时,她将知道要启动它,必须执行com.alabala.dev.Hey。

什么是 cp ,为什么必须指定它?用简单的词cp来表示类路径-类目录和归档文件,JVM希望在其中装载内容时在其中进行搜索。因此,这里与Gradle无关,它是Java。

关于gradle - 无法执行从gradle构建的jar文件(包含依赖项),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26841176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com