与Maven我可以创建一个项目,建立了我的聚甲醛与它的依赖,写了一类主要方法,然后运行它键入:
mvn compile exec:java -Dexec.mainClass=thornydev.App
什么是这样做的gradle这个相同呢?
我可以做gradle build
,它建立一个jar文件对我来说,但如果主阶级对另一个罐子任何相关性,只是运行的罐子不会在未设置CLASSPATH工作。 能否gradle这个Java插件运行应用程序和设置classpath中我吗?
我正在寻找一个简单的一次性使用命令行的解决方案,而不是IDE集成(我知道如何做到这一点)。
最简单的方法是使用应用程序插件 ,其中除其他外提供了一个run
任务。 为了使主类的命令行配置,你必须设置mainClassName
某些系统(或项目)属性的值,然后通过在命令行中该属性:
apply plugin: "application"
mainClassName = System.getProperty("mainClass")
现在,您可以运行该应用程序gradle run -DmainClass=thornydev.App
。
我需要运行Java程序的生成过程的一部分,而应用程序插件带着太多的行李。
我没有fidde与应用程序的插件,但最终我用少得多的“微创” JavaExec插件 。
我有一个类文件MyObfuscator.class
在build.outputDirectory
之前,我有一个pom.xml
这个样子,跑在构建目录代码混淆有两个参数:
<project>
...
<build>
...
<plugins>
...
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>obfuscate</id>
<phase>package</phase>
<goals>
<goal>exec</goal>
</goals>
<configuration>
<executable>java</executable>
<workingDirectory>${project.build.outputDirectory}</workingDirectory>
<arguments>
<argument>-Djava.library.path=.</argument>
<argument>-classpath</argument>
<argument>${project.build.outputDirectory}:lib.jar</argument>
<argument>MyObfuscator</argument>
<argument>HELLO</argument>
<argument>GOODBYE</argument>
</arguments>
</configuration>
</execution>
</executions>
</plugin>
...
</plugins>
</build>
...
</project>
我煮下来到这件事情中的摇篮:
apply plugin: "java"
// ...
task obfuscate(type: JavaExec) {
// Make sure it runs after compilation and resources.
// Skip this if that's not a requirement.
dependsOn classes
// run in the buildDir (this requirement was what
// made a simple "doLast" infeasible)
workingDir = file(buildDir)
classpath = files([
"${buildDir}/classes",
"${buildDir}/resources/main/lib.jar"
])
main = "MyObfuscator"
}
如果你需要的参数执行像在Maven上面的例子,再加入几行的任务:
task obfuscate(type: JavaExec) {
// ... (as above)
// Set PARAM1 to a default value when it's not
// defined on the command line
if(!project.hasProperty("PARAM1")) {
ext.PARAM1 = "HELLO"
}
// PARAM1 is dynamic and PARAM2 is static, always "GOODBYE"
args = [PARAM1, "GOODBYE"]
}
然后,依赖于assemble
的任务obfuscate
(把下面这行的任何地方obfuscate
任务定义):
assemble.dependsOn obfuscate
或让(前面) jar
任务依赖于它。 看到底部的图形这里本文档节对其中注入这个更多的想法。
然后,您可以调用的gradle一样gradle build -PPARAM1=HELLO
运行参数生成。
文章来源: What is the gradle equivalent of maven's exec plugin for running Java apps?