繁体   English   中英

手动运行Gradle应用程序插件打包的jar

[英]Manually running jar packaged by Gradle's application plugin

我创建了一个简单的gradle项目,其中包括应用程序插件。 我运行distZip任务以创建所有罐子的zip文件。 下面是我使用的代码:

的build.gradle

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'eclipse'

sourceCompatibility = 1.7
version = '1.0'

repositories {
   mavenCentral()
}

project(':Module') {
    jar {
        manifest {
            attributes 'Main-Class': 'com.sample.HelloWorld'
        }
    }
}

dependencies{
    compile 'joda-time:joda-time:2.7'
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

mainClassName = "com.sample.HelloWorld"

com.sample.HelloWorld.java

package com.sample;

import org.joda.time.LocalTime;

public class HelloWorld {
    public static void main(String[] args) {
        LocalTime currentTime = new LocalTime();
        System.out.println("The current local time is: " + currentTime);
    }
}

运行distZip任务后,我解压缩生成的build / distribution / Module-1.0.zip存档,该存档具有以下目录结构:

Module-1.0
|__bin
|__lib
     |__Module-1.0.jar
     |__joda-time-2.7.jar

在lib目录中,我尝试了以下命令:

java com.sample.HelloWorld -cp Module-1.0.jar;joda-time-2.7.jar

给出以下输出:

Error: Could not find or load main class com.sample.HelloWorld

然后我尝试了:

java -jar Module-1.0.jar -cp joda-time-2.7.jar

给出了输出:

Exception in thread "main" java.lang.noClassDefFoundError: org/joda/time/LocalTime...

我确保在我的Manifest.MF文件中,Main Class属性设置为com.sample.HelloWorld,所以我的问题是为什么运行java命令会导致出现“未找到主类”错误,但是使用java -jar命令不会导致该错误?

另外,为什么当我运行java -jar命令时Java无法找到joda-time-2.7.jar依赖关系?

我知道您可以使用gradlew run命令运行该程序-我已经尝试过了,并且效果很好。 我只是很好奇为什么运行传统的Java命令不起作用。

尝试这个:

java -cp Module-1.0.jar:joda-time-2.7.jar:. com.sample.HelloWorld

您的java命令行参数错误。 您需要在-jar之前指定-cp参数。 -jar参数之后,其他所有内容都是主类的命令行参数。 所以您想要的是:

$ java -cp joda-time-2.7.jar-jar Module-1.0.jar 

另外,您根本不需要执行此操作,Grade应用程序插件将为您构建一个Shell脚本(* nix系统)和.bat文件(Windows)来启动您的程序,因此,如果您使用* nix ,改为执行以下操作:

$ Module-1.0/bin/<name_of_the_script_here>

暂无
暂无

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

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