当前位置: 首页 > 知识库问答 >
问题:

maven运行Java应用程序的exec插件的gradle等价物是什么?

赵奕
2023-03-14

使用maven,我可以创建一个项目,设置我的pom及其依赖项,使用main方法编写一个类,然后运行它,键入:

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

做这件事有什么好处?

我可以执行< code>gradle build,它为我构建了一个jar文件,但是如果主类对其他jar有任何依赖,那么不设置类路径,只运行jar是不行的。gradle java插件可以运行应用程序并为我设置类路径吗?

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

共有3个答案

马峻
2023-03-14

如果我的插件是:

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>exec-maven-plugin</artifactId>
  <executions>
    <execution>
      <id>run-benchmarks</id>
      <phase>integration-test</phase>
      <goals>
        <goal>exec</goal>
      </goals>
      <configuration>
        <classpathScope>test</classpathScope>
        <executable>java</executable>
        <arguments>
          <argument>-classpath</argument>
          <classpath />
          <argument>org.openjdk.jmh.Main</argument>
          <argument>.*</argument>
        </arguments>
      </configuration>
    </execution>
  </executions>
</plugin>
<plugin>

Gradle中的等效词是什么?

霍弘厚
2023-03-14

作为构建过程的一部分,我需要运行一个Java程序,而应用程序插件带来了太多负担。

我确实修改了应用程序插件,但最终我使用了“侵入性”小得多的JavaExec插件。

我在< code > build . output directory 中有一个类文件< code>MyObfuscator.class,在此之前我有一个这样的< code>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.dependsOn obfuscate

或者让(较早的)jar任务依赖于它。有关在何处注入此功能的更多想法,请参见本文档部分底部的图表。

然后,您可以调用 gradle,如 gradle build -PPARAM1=HELLO 来运行参数化构建。

何楷
2023-03-14

最简单的解决方案是使用Application Plugin,它提供了一个run任务。要使主类可从命令行配置,您必须将main ClassName设置为某个系统(或项目)属性的值,然后从命令行传递该属性:

apply plugin: "application"

mainClassName = System.getProperty("mainClass")

现在,您可以使用 gradle run -DmainClass=thornydev 运行应用程序。应用

 类似资料:
  • 我试图按照这里的说明,使用Gradle,用Kotlin和Java 11构建一个简单的JavaFX11程序。但是,这个页面使用的是Gradle的Groovy DSL,而我正在尝试使用Kotlin DSL。令人惊讶的是,我在谷歌搜索时没有找到一个文档,将每个Groovy构造映射到其等价的Kotlin构造,或者解释如何将Groovy DSL代码转换为等价的Kotlin DSL代码。(这似乎是Gradle

  • 正如Maven(客户端)和IvyResolver(Gradle使用)一样,Bundler解决了配置文件(Bundler的Gemfile)中声明的库依赖关系。然而,在这之后,绑定器将依赖项解析保存在Gemfile上。锁它允许其他开发人员使用完全相同的库。 例如,Maven在依赖关系解决中使用了一种不明确的决定论方法来解决冲突。例如,将版本指定为。。。 不保证使用该版本。并将版本指定为。。。 给我们几

  • 我看到Kotlin有,它们相当于Java中的。 现在我想知道,是否有等价于Java的?

  • Scala的sbt可以选择只运行以前失败的测试。有没有格拉德尔的等效物? https://www.scala-sbt.org/1.x/docs/Testing.html#testQuick

  • 我是fabric8 maven插件的新手。 我有一个Dropwizard脂肪罐,我想为OpenShift/okd将其装箱。似乎推荐的方法将调用java exec生成器:http://maven.fabric8.io/#generator-java执行器 问题是Dropwizard应用程序必须提供一个配置文件参数,但我不确定如何指示生成器这样做。 正确的调用应该是: 生成器执行以下操作,其中缺少参数

  • 是否有任何Golang等效的Java的? 将源阵列从特定的起始位置复制到目标阵列。要复制的参数数量由参数决定。位于到的组件将从复制到目标阵列中。