我现在是 gradle 和学习的新手。我正在尝试使用 gradle 构建一个可运行的 jar(我构建的 jar 应该从命令提示符运行)。我刚刚开始使用一个带有依赖项的简单 HelloWorld
项目,并尝试使用 gradle 构建它。我没有使用maven。所以我将依赖项 jar 添加到项目文件夹内的 lib 文件夹中。以下是详细信息。
Gradle 版本:3.1 Eclipse 版本:Neon
HelloWorld.java
package com.padhu.test;
import org.joda.time.LocalTime;
public class HelloWorld {
public static void main(String[] args) {
// TODO Auto-generated method stub
LocalTime currentTime = new LocalTime();
System.out.println("The current local time is: " + currentTime);
System.out.println("Hello World");
}
}
项目结构:
build_path_snap
build.gradle 文件:
apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'com.padhu.test.HelloWorld'
repositories {
flatDir {
dirs 'lib'
}
}
dependencies {
compile files(fileTree(dir: 'lib', includes: ['*.jar']))
}
jar {
manifest {
attributes(
'Main-Class': 'com.padhu.test.HelloWorld'
)
}
}
我可以在 cmd 中成功执行 gradle build
并且正在生成 jar 文件。但在 jar 文件中,我只能看到 HelloWorld 文件夹结构,但看不到依赖文件。因此,我无法从命令提示符运行 jar,因为我收到 NoClassDefFoundError: org/joda/time/LocalTime
..
我尝试通过搜索和阅读博客来自行解决问题..但我无法成功运行该 jar。
请帮助我。
最佳答案
看来,您误解了 application
插件的行为方式。它不会创建一个所谓的 fat-jar(其中包含所有依赖项),而是创建一个 jar 并能够运行它,将所有依赖项添加到类路径中。
您可以按如下方式运行您的应用程序:
gradle run
或者您可以使用自动应用的发行版插件,并使用脚本创建项目的发行版来启动它,并将所有依赖库放在单独的文件夹中。只需运行它:
gradle distZip
您可以在official user guide中阅读更多相关信息。 .
关于java - Gradle 未编译 lib 文件夹中的依赖项 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167179/