如何从命令行 运行 Java Gradle 项目中的主要方法?
How do I run a main method in a Java Gradle project from command line?
我有一个 Gradle 项目(比如 MyProject
),它有一个主要方法,我只想将其用于 运行 一个小型 Java 应用程序。比如说,脚本在 class 中,包如下:
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
这个脚本不是应用程序的主要部分,但我只是想让它偶尔 运行,我想弄清楚如何 运行它本身就是命令行。有没有办法在不导入更多库的情况下做到这一点?我见过用一个罐子做的,但我想我可以不用一个罐子做这个。
更新:
试图在阅读 this 后添加 class 路径,但现在我遇到了不同的错误:
$ java -cp com/3rdparty/library/exception/LibraryException com.car.ant.MyScript
Error: Could not find or load main class com.car.ant.MyScript
您可以在 the Gradle Docs 阅读有关如何执行此操作的信息。
apply plugin: 'application'
mainClassName = "com.mycompany.myapplication.MyScript"
applicationDefaultJvmArgs = [
"-Djava.util.logging.config.file=src/main/resources/logging.properties"
]
然后只需使用 gradlew run
即可 运行 您的应用程序。
作为一个额外的好处,这个插件可以帮助您打包您的应用程序以进行分发。为此使用 gradle distZip
命令。
试试这个。
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 运行 或 gradle -q 运行WithJavaExec
我有一个 Gradle 项目(比如 MyProject
),它有一个主要方法,我只想将其用于 运行 一个小型 Java 应用程序。比如说,脚本在 class 中,包如下:
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
这个脚本不是应用程序的主要部分,但我只是想让它偶尔 运行,我想弄清楚如何 运行它本身就是命令行。有没有办法在不导入更多库的情况下做到这一点?我见过用一个罐子做的,但我想我可以不用一个罐子做这个。
更新:
试图在阅读 this 后添加 class 路径,但现在我遇到了不同的错误:
$ java -cp com/3rdparty/library/exception/LibraryException com.car.ant.MyScript
Error: Could not find or load main class com.car.ant.MyScript
您可以在 the Gradle Docs 阅读有关如何执行此操作的信息。
apply plugin: 'application'
mainClassName = "com.mycompany.myapplication.MyScript"
applicationDefaultJvmArgs = [
"-Djava.util.logging.config.file=src/main/resources/logging.properties"
]
然后只需使用 gradlew run
即可 运行 您的应用程序。
作为一个额外的好处,这个插件可以帮助您打包您的应用程序以进行分发。为此使用 gradle distZip
命令。
试试这个。
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 运行 或 gradle -q 运行WithJavaExec