我是Java和Gradle的新手,有一个非常新的问题。我有以下Java文件:
public class TestMain {
public static void main(String[] args) {
System.out.println("Hello.....");
}
}
我能够使用javac编译上述文件,并使用命令“java TestMain”运行它。
我现在正在尝试使用gradle build框架做同样的事情。我执行了以下步骤:run"gradle init--type java-Library将上述文件复制到src/main/java/
当我跑的时候”。/gradle build”,我得到一个TestMain.class文件,还有一个“building-java-file.jar”(整个grad le目录都在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。班另外,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应用程序开始
友情链接: 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中
>
执行gradleinit——类型为java应用程序
将以下gradle任务添加到build.gradle中
可运行的胖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
}
如何使用?
将上述任务添加到构建中。gradle
执行gradle-fatJar
//创建fatJar
Executegragle-createJar代码>//创建已复制依赖项的jar。
我写的关于这个主题的完整文章可以在这里阅读:一个简单的Java项目与Gradle