[英]Using gradle to build a very simple java program
我是 Java 和 Gradle 的新手,有一个非常新手的问题。 我有以下 Java 文件:
public class TestMain {
public static void main(String[] args) {
System.out.println("Hello.....");
}
}
我能够使用 javac 编译上述文件,并使用命令“java TestMain”运行它。
我现在正在尝试使用 gradle 构建框架来做同样的事情。 我执行了以下步骤:运行“gradle init --type java-library 将上述文件复制到 src/main/java/
当我运行“./gradlew build”时,我得到一个 TestMain.class 文件,还有一个“building-java-file.jar”(整个 gradle 目录在 building-java-file 目录中)。
$ ls -l build/classes/main/TestMain.class
-rw-r--r-- 1 user1 foo\eng 610 May 22 17:22 build/classes/main/TestMain.class
$ java build/classes/main/TestMain
Error: Could not find or load main class build.classes.main.TestMain
我如何运行 TestMain.class? 另外,gradle 创建 jar 文件的原因是什么 - building-java-file.jar?
顺便说一句,我的 build.gradle 文件非常空。
apply plugin: 'java'
repositories {
jcenter()
}
dependencies {
// The production code uses the SLF4J logging API at compile time
compile 'org.slf4j:slf4j-api:1.7.21'
testCompile 'junit:junit:4.12'
}
谢谢你,艾哈迈德。
我的问题的答案在 Gradele 文档站点中有清楚的解释。
基本上,从: gradle init --type java-application
链接: https : //guides.gradle.org/building-java-applications/?_ga=2.79084180.165016772.1527029076-64181247.1527029076
使用 JavaExec。 作为示例,将以下内容放入 build.gradle
task execute(type:JavaExec) {
main = mainClass
classpath = sourceSets.main.runtimeClasspath
}
运行 gradle -PmainClass=Boo 执行。 你得到
$ gradle -PmainClass=Boo execute
:compileJava
:compileGroovy UP-TO-DATE
:processResources UP-TO-DATE
:classes
:execute
I am BOOMMMM!
mainClass 是在命令行动态传入的属性。 classpath 设置为拾取最新的类。
如果您没有传入 mainClass 属性,这将按预期失败。
$ gradle execute
FAILURE: Build failed with an exception.
* Where:
Build file 'xxxx/build.gradle' line: 4
* What went wrong:
A problem occurred evaluating root project 'Foo'.
> Could not find property 'mainClass' on task ':execute'.
我认为您正在寻找创建可运行 jar 的解决方案。 这是您可以在 build.gradle 中添加的解决方案
执行gradle init --type java-application
将以下 gradle 任务添加到 build.gradle。
Runnable fat Jar(将所有依赖库复制到 jar 中)
task fatJar(type: Jar) { manifest { attributes 'Main-Class': 'com.example.gradle.App' } from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } with jar }
将所有依赖项复制到目录并将类路径添加到清单的可运行 jar
def dependsDir = "${buildDir}/libs/dependencies/"
task copyDependencies(type: Copy) {
from configurations.compile
into "${dependsDir}"
}
task createJar(dependsOn: copyDependencies, type: Jar) {
manifest {
attributes('Main-Class': 'com.example.gradle.App',
'Class-Path': configurations.compile.collect { 'dependencies/' + it.getName() }.join(' ')
)
}
with jar
}
如何使用 ?
将上述任务添加到 build.gradle
执行gradle fatJar
//创建 fatJar
执行gradle createJar
// 创建 jar 并复制依赖项。
我在这个主题上写的一篇完整的文章,可以在这里阅读: A simple java project with Gradle
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.