【问题标题】:How to run a Gradle task with different parameters如何使用不同的参数运行 Gradle 任务
【发布时间】:2016-03-08 22:03:47
【问题描述】:

我想在 gradle 中定义一个任务(称为 gen),它运行 gradle 任务 jar,但具有 baseName 的固定值。我还希望之后可以使用原始任务jar

我的问题是,我无法转移清单的设置。

我累了,例如

def mainFile = 'com.so.proj.App'
def filename = 'something'

jar {
    baseName filename
    manifest {
        attributes 'Main-Class': mainFile
    }
}

task gen (type: Jar) {
    description "Generates JAR without version number."
    doFirst {
        //archiveName = jar.baseName + "." + extension
        archiveName = filename + ".jar"
        manifest {
            attributes 'Main-Class': mainFile
        }
    }
}

我以为我正在重新定义 Jar 任务,方法是使用 archiveName 和 manifest 的其他值。

在运行./gradlew jar 时会生成一个可执行的 JAR 文件。

运行./gradlew gen 时会生成一个jar 文件。不幸的是,当尝试使用 java -jar build/libs/something.jar 运行程序时,我收到错误消息:

java -jar build/libs/something.jar

Error: Could not find or load main class com.so.proj.App

我做错了什么?我只是想用不同的参数运行 jar 任务(不配置 jar 任务本身,而是运行别名)。我写的代码是做什么的(运行任务时我没有收到错误。但是它在做什么?)

【问题讨论】:

  • 您可能只需将with Jar 添加到您的任务生成定义中

标签: java gradle jar build.gradle


【解决方案1】:

我认为您的 gen 任务中不需要 doFirst。您需要添加 with jar 以包含所有常规 jar 内容,这会导致:

task gen (type: Jar) {
    description "Generates JAR without version number."
    archiveName = filename + ".jar"
    manifest {attributes 'Main-Class': mainFile}
    with jar
}

【讨论】:

  • 您有with 的参考资料吗?我在所有(?)文档页面中搜索了任务,但找不到任何东西。这是在哪里记录的?
  • 我相信with 是常规的withwith jar 使用jar 闭包。但我一直无法找到一个很好的参考资料来令人满意地解释这一点。
  • 在此给出的with()不是Groovy方法,而是来自Jar类:stackoverflow.com/a/35948697
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2020-12-15
  • 2022-07-19
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多