3

我有一个 Gradle 项目(例如MyProject),它有一个我只想用来运行小型 Java 应用程序的 main 方法。说,脚本在一个类和包中,如下所示:

MyScript.Java

package com.car.ant;

import com.3rdparty.library.LibraryException;

public class MyScript {
    public static void main(String[] args) {
        System.out.println("Hello world!");
    }
}

我用 构建项目$ ./gradlew clean build,没问题。我正在尝试通过命令行运行它,但是当我这样做时,尝试运行时出现异常:

$ pwd
~/workspace/MyProject/build/classes/java/main
$ java com.car.ant.MyScript
Exception in thread "main" java.lang.NoClassDefFoundError: com/3rdparty/library/exception/LibraryException
        at java.lang.Class.getDeclaredMethods0(Native Method)
        at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
        at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
        ... 7 more

这个脚本不是应用程序的主要部分,但我只是希望它在那里每隔一段时间运行一次,我想弄清楚如何通过命令行自行运行它。有没有办法在不导入库的情况下做到这一点?我见过用一个罐子做的,但我想我可以不用一个罐子做这个。

更新:

阅读此内容后尝试添加类路径,但现在我遇到了不同的错误:

$ java -cp com/3rdparty/library/exception/LibraryException com.car.ant.MyScript
Error: Could not find or load main class com.car.ant.MyScript
4

2 回答 2

5

您可以在Gradle 文档中了解如何执行此操作。

apply plugin: 'application'
mainClassName = "com.mycompany.myapplication.MyScript"
applicationDefaultJvmArgs = [
    "-Djava.util.logging.config.file=src/main/resources/logging.properties"
]

然后只需使用gradlew run来运行您的应用程序。

作为一个额外的好处,这个插件可以帮助你打包你的应用程序进行分发。为此使用gradle distZip命令。

于 2018-09-19T11:58:51.037 回答
1

尝试这个。

    plugins {
    id 'java-library'
    id 'application'
}
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
/*
sourceCompatibility is "Java version compatibility to use when compiling Java source." 
targetCompatibility is "Java version to generate classes for."
*/
repositories {
    jcenter()
}
dependencies {
}


//To run the class name from command line using gradle run
mainClassName = 'com.sam.home.HelloWorld'

//To create a runnable jar  in GradleJavaProject\build\libs then java -jar GradleJavaProject.jar
jar {
    manifest {
        attributes 'Main-Class': 'com.sam.home.HelloWorld'
    }
}
//Beyond this line evertyhing is optional
//Alternatively you can run it as a task too gradle -q  runWithJavaExec
task runWithJavaExec(type: JavaExec) {
    group = "Execution"
    description = "Run the main class with JavaExecTask"
    classpath = sourceSets.main.runtimeClasspath
    main = 'com.sam.home.HelloWorld'
}
wrapper {
gradleVersion = '5.5'
distributionType = Wrapper.DistributionType.BIN
}

在命令行中输入 gradle run 或 gradle -q runWithJavaExec

于 2019-12-04T12:29:05.590 回答