我有一个基于gradle的独立项目。当我进行gradle构建时,jar在build / libs下生成。如何从命令行运行此可执行jar?我试过:java -cp build/libs/foo.jar full.package.classname
但是对于导入的类我得到noClassFoundException。如何将依赖jar作为classpath的一部分?
答案 0 :(得分:10)
由于问题用gradle标记标记,我假设你想从gradle build运行jar。我还假设您使用java
插件进行gradle构建。
在你的gradle中添加下一行:
task runFinalJar(type: JavaExec) {
classpath = files('build/libs/foo.jar')
classpath += sourceSets.main.runtimeClasspath
main = full.package.classname
}
现在,您可以将任务包含在构建过程中:
build.dependsOn.add("runFinalJar")
或者只需从命令行运行它:
gradle build runFinalJar
更新如Peter建议的那样使用应用程序插件更清晰
答案 1 :(得分:6)
使用application plugin创建包含代码,依赖项和启动脚本的存档,或创建可执行的胖Jar。后者不应该以天真的方式完成,而应该使用gradle-one-jar(或类似的)插件。
答案 2 :(得分:4)
添加一个简单的任务来运行jar
task runJar(type: JavaExec) {
main = "-jar";
args jar.archivePath
}
答案 3 :(得分:3)
我认为答案超出了实际问题的范围。问题是,或者可以重述为如何运行gradle构建的JAR。
提问者声称他们已经尝试java -cp build/libs/foo.jar full.package.classname
无济于事。
正确的语法是java -jar build/libs/foo.jar
,或者如果JAR就在那里,那么它通常只是java -jar foo.jar
。
为了清晰起见,应该编辑这个问题,恕我直言。
答案 4 :(得分:0)
我是新手,因此我在这里的解释会很简单。我的build.gradle
文件仅包含一行:apply plugin: 'java'
。我在hello world
中有一个src/main/java/org/dx/test/App.java
Java代码。在命令外壳中,键入:gradle build
。然后我看到了这个jar文件是神奇创建的:
build/libs/helloworld.jar
以上所有答案均无效。对我有用的是:
java -cp build/libs/helloworld.jar org.dx.test.App
现在,我知道gradle充满了魔法,因此我确定我的情况可能不会完全反映您的情况。所做的动作是:
build.gradle
行文件App.java
gradle build