繁体   English   中英

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

[英]Running an executable jar file built from a gradle based project

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

由于问题标有 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

更新按照彼得的建议使用应用程序插件更干净

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

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

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

更新jar.archivePath现在已弃用,您可以使用jar.archiveFile.get()

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

我认为答案超出了问题的实际意义。 问题是,或者可以重申为,如何运行 gradle 构建的 JAR。

提问者说他​​们试过java -cp build/libs/foo.jar full.package.classname无济于事。

正确的语法是java -jar build/libs/foo.jar ,或者如果 JAR 就在那里,显然它只是java -jar foo.jar正常。

恕我直言,为了清楚起见,应该编辑问题。

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

build/libs/helloworld.jar

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

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

现在,我知道 gradle 充满了魔法,所以我相信我的情况可能无法完全反映你的情况。 采取的行动是:

  1. 创建一行build.gradle文件
  2. 在医生规定的文件夹位置下创建App.java
  3. 键入gradle build

要在终端中运行 jar,首先使用“gradle clean build”构建一个 jar,然后导航到 -> 构建 -> 分发 -> unzip <filename>.zip file -> cd 到解压缩文件 -> cd bin会有 2文件 - projectname & <projectname.bat> 使用 ./projectname 运行 jar

如果有一些参数要传递给主要方法使用:运行 jar with./projectname params

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM