我有一个独立的项目,这是基于gradle。当我进行gradle构建时,jar在build/libs下生成。我如何从命令行运行这个可执行的jar?我尝试了:java -cp build/libs/foo.jar full.package.classname,但是我得到了导入的类的noClassFoundException。如何将依赖jar作为类路径的一部分?
java -cp build/libs/foo.jar full.package.classname
drkbr07n1#
因为question是用gradle标记的,我假设你想从gradle build运行jar。我还假设你使用java插件来构建你的gradle。在gradle中添加下一行:
java
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更干净
egmofgnx2#
添加一个简单的任务来运行jar
task runJar(type: JavaExec) { main = "-jar"; args jar.archivePath }
UPDATE:jar.archivePath已弃用,您可以使用jar.archiveFile.get()
jar.archivePath
jar.archiveFile.get()
task runJar(type: JavaExec) { main = "-jar"; args jar.archiveFile.get() }
jc3wubiy3#
使用应用程序插件创建一个包含代码、其依赖项和启动脚本的归档文件,或者创建一个可执行的fat Jar。后者不应该以简单的方式完成,而是使用gradle-one-jar(或类似的)插件。
lrpiutwd4#
我认为答案超出了问题的实质。问题是,或者可以重新表述为,如何运行gradle构建的JAR。提问者说他们已经尝试了java -cp build/libs/foo.jar full.package.classname,但没有成功。正确的语法是java -jar build/libs/foo.jar,或者如果JAR就在那里,显然它通常只是java -jar foo.jar。为了清楚起见,这个问题应该编辑一下,IMHO。
java -jar build/libs/foo.jar
java -jar foo.jar
y53ybaqx5#
我是一个新手,所以我在这里的解释将是简单的。我的build.gradle文件只包含一行:apply plugin: 'java' .我有一个hello world java代码在src/main/java/org/dx/test/App.java .在命令shell中,我键入:gradle build。然后我看到这个jar文件被神奇地创建了:
build.gradle
apply plugin: 'java'
hello world
src/main/java/org/dx/test/App.java
gradle build
build/libs/helloworld.jar
以上所有的答案都不起作用。对我有效的是:
java -cp build/libs/helloworld.jar org.dx.test.App
现在,我知道gradle充满了巫术,所以我相信我的情况可能不能完全反映你的情况。采取的措施包括:1.创建一行build.gradle文件1.在医生指定的文件夹位置下创建App.java1.型号gradle build
App.java
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
unzip <filename>.zip file
cd bin
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
7条答案
按热度按时间drkbr07n1#
因为question是用gradle标记的,我假设你想从gradle build运行jar。我还假设你使用
java
插件来构建你的gradle。在gradle中添加下一行:
您现在可以将任务包含到生成过程中:
或者从命令行运行它:
UPDATE:使用应用插件as Peter suggested更干净
egmofgnx2#
添加一个简单的任务来运行jar
UPDATE:
jar.archivePath
已弃用,您可以使用jar.archiveFile.get()
jc3wubiy3#
使用应用程序插件创建一个包含代码、其依赖项和启动脚本的归档文件,或者创建一个可执行的fat Jar。后者不应该以简单的方式完成,而是使用gradle-one-jar(或类似的)插件。
lrpiutwd4#
我认为答案超出了问题的实质。问题是,或者可以重新表述为,如何运行gradle构建的JAR。
提问者说他们已经尝试了
java -cp build/libs/foo.jar full.package.classname
,但没有成功。正确的语法是
java -jar build/libs/foo.jar
,或者如果JAR就在那里,显然它通常只是java -jar foo.jar
。为了清楚起见,这个问题应该编辑一下,IMHO。
y53ybaqx5#
我是一个新手,所以我在这里的解释将是简单的。我的
build.gradle
文件只包含一行:apply plugin: 'java'
.我有一个hello world
java代码在src/main/java/org/dx/test/App.java
.在命令shell中,我键入:gradle build
。然后我看到这个jar文件被神奇地创建了:以上所有的答案都不起作用。对我有效的是:
现在,我知道gradle充满了巫术,所以我相信我的情况可能不能完全反映你的情况。采取的措施包括:
1.创建一行
build.gradle
文件1.在医生指定的文件夹位置下创建
App.java
1.型号
gradle build
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
dzhpxtsq7#
应用Gradle插件会在Gradle模块中添加名为run的任务。
使用此插件,可以执行名为app的Gradle模块,如下所示:
输出
相关设置如下所示:
~/Workspace/so20728621/settings.gradle
~/Workspace/so20728621/app/build.gradle
环境