运行从基于gradle的项目构建的可执行jar文件

niknxzdl  于 2023-06-30  发布在  其他
关注(0)|答案(7)|浏览(168)

我有一个独立的项目,这是基于gradle。当我进行gradle构建时,jar在build/libs下生成。我如何从命令行运行这个可执行的jar?我尝试了:java -cp build/libs/foo.jar full.package.classname,但是我得到了导入的类的noClassFoundException。如何将依赖jar作为类路径的一部分?

drkbr07n

drkbr07n1#

因为question是用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

UPDATE:使用应用插件as Peter suggested更干净

egmofgnx

egmofgnx2#

添加一个简单的任务来运行jar

task runJar(type: JavaExec) {
    main = "-jar";
    args jar.archivePath
}

UPDATEjar.archivePath已弃用,您可以使用jar.archiveFile.get()

task runJar(type: JavaExec) {
    main = "-jar";
    args jar.archiveFile.get()
}
jc3wubiy

jc3wubiy3#

使用应用程序插件创建一个包含代码、其依赖项和启动脚本的归档文件,或者创建一个可执行的fat Jar。后者不应该以简单的方式完成,而是使用gradle-one-jar(或类似的)插件。

lrpiutwd

lrpiutwd4#

我认为答案超出了问题的实质。问题是,或者可以重新表述为,如何运行gradle构建的JAR。
提问者说他们已经尝试了java -cp build/libs/foo.jar full.package.classname,但没有成功。
正确的语法是java -jar build/libs/foo.jar,或者如果JAR就在那里,显然它通常只是java -jar foo.jar
为了清楚起见,这个问题应该编辑一下,IMHO。

y53ybaqx

y53ybaqx5#

我是一个新手,所以我在这里的解释将是简单的。我的build.gradle文件只包含一行:apply plugin: 'java' .我有一个hello world java代码在src/main/java/org/dx/test/App.java .在命令shell中,我键入:gradle build。然后我看到这个jar文件被神奇地创建了:

build/libs/helloworld.jar

以上所有的答案都不起作用。对我有效的是:

java -cp build/libs/helloworld.jar org.dx.test.App

现在,我知道gradle充满了巫术,所以我相信我的情况可能不能完全反映你的情况。采取的措施包括:
1.创建一行build.gradle文件
1.在医生指定的文件夹位置下创建App.java
1.型号gradle build

mwngjboj

mwngjboj6#

要在终端中运行jar,首先使用“gradle clean build”构建jar,然后导航到-> build -> distribution -> unzip <filename>.zip file-> cd to unzipped file -> cd bin,将有2个文件- projectname,并<projectname.bat>使用./projectname运行jar
如果有一些参数要传递给main方法用途:使用./projectname参数运行jar

dzhpxtsq

dzhpxtsq7#

应用Gradle插件会在Gradle模块中添加名为run的任务。

使用此插件,可以执行名为app的Gradle模块,如下所示:

./gradlew :app:run

输出

BUILD SUCCESSFUL in 534ms
17 actionable tasks: 1 executed, 16 up-to-date
 ~/Workspace/so20728621 $ ./gradlew clean :app:run

> Task :app:run
[main] INFO rbento.app.Main - Running...

相关设置如下所示:

~/Workspace/so20728621/settings.gradle

rootProject.name = 'so20728621'

include('app')

~/Workspace/so20728621/app/build.gradle

plugins {
    id 'java'
    id 'application'
}

application {
    mainClass = 'rbento.app.Main'
}

环境

Gradle: 8.1.1
JVM:    17.0.6 (Azul Systems, Inc. 17.0.6+10-LTS)
OS:     Mac OS X 13.4.1 aarch64

相关问题