什么是Maven的Exec插件的运行Java应用程序的gradle这个相同呢?(What is th

2019-09-01 19:46发布

与Maven我可以创建一个项目,建立了我的聚甲醛与它的依赖,写了一类主要方法,然后运行它键入:

mvn compile exec:java -Dexec.mainClass=thornydev.App

什么是这样做的gradle这个相同呢?

我可以做gradle build ,它建立一个jar文件对我来说,但如果主阶级对另一个罐子任何相关性,只是运行的罐子不会在未设置CLASSPATH工作。 能否gradle这个Java插件运行应用程序和设置classpath中我吗?

我正在寻找一个简单的一次性使用命令行的解决方案,而不是IDE集成(我知道如何做到这一点)。

Answer 1:

最简单的方法是使用应用程序插件 ,其中除其他外提供了一个run任务。 为了使主类的命令行配置,你必须设置mainClassName某些系统(或项目)属性的值,然后通过在命令行中该属性:

apply plugin: "application"

mainClassName = System.getProperty("mainClass")

现在,您可以运行该应用程序gradle run -DmainClass=thornydev.App



Answer 2:

我需要运行Java程序的生成过程的一部分,而应用程序插件带着太多的行李。

我没有fidde与应用程序的插件,但最终我用少得多的“微创” JavaExec插件 。

我有一个类文件MyObfuscator.classbuild.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?
标签: gradle