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

时间:2013-12-22 10:56:29

标签: java jar gradle

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

5 个答案:

答案 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充满了魔法,因此我确定我的情况可能不会完全反映您的情况。所做的动作是:

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