请注意:即使这个问题特别提到 Bamboo CI和 Gradle ShadowJar插件,我相信这是一个基本的 Gradle 配置问题,相信任何厌战的 Gradle Guru 都可以回答。
我有一个使用 Gradle 构建的 Groovy 应用程序,其中 build.gradle
是:
apply plugin: 'groovy'
apply plugin: 'maven'
apply plugin: 'application'
apply plugin: 'com.github.johnrengelman.shadow'
apply plugin: 'eclipse'
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'
group = 'com.me.myapp'
mainClassName = "com.me.myapp.MyAppDriver"
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:1.2.0'
}
}
dependencies {
// Omitted for brevity
}
jar {
manifest {
attributes 'Main-Class': mainClassName
}
}
repositories {
mavenLocal()
mavenCentral()
}
shadowJar {
classifier = ''
mergeServiceFiles {
exclude 'META-INF/*.DSA'
exclude 'META-INF/*.RSA'
}
}
artifacts {
archives(file("${buildDir}/libs/myapp-${version}.jar")) {
name "myapp"
classifier ""
builtBy shadowJar
}
}
task wrapper(type: Wrapper) {
gradleVersion = '2.3'
}
在哪里
gradle.properties
是:group=com.me.myapp
version=1.0.0
如您所见,我正在使用 ShadowJar 为我的应用程序生成一个独立的“胖 JAR”。当我运行
gradle clean build shadowJar
在我的本地机器上,Gradle 生成 build/libs/myapp-1.0.0.jar
工件/存档。但是,当从我们的 CI 服务器 (Bamboo) 运行相同的命令时,Gradle 会生成 build/libs/MYAPP-KEY-1.0.0.jar
工件/存档,其中 MYAPP-KEY
是 Bamboo “构建 key ”(本质上是标识服务器上构建的唯一 key /标签)。如果你对我在说什么一无所知,我认为这并不重要。重要的是要了解 Bamboo 将查看 myapp
的源代码到名为 MYAPP-KEY
的文件夹在 CI 服务器上。所以在本地myapp/
是我项目的根,但在 CI MYAPP-KEY
上是我项目的根。重点是我没有在我的 Gradle 配置中明确定义某些内容,因此 Gradle 似乎正在使用项目根目录的名称来生成构建 JAR 的名称。 这是什么“东西”,我如何/在哪里定义它? 期望的最终目标是产生
build/libs/myapp-1.0.0.jar
在本地和 CI 上。
最佳答案
请看https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html
您可以指定 jar 的基本名称或完整存档名称
将其添加到您的 jar
部分
关于gradle - 如何使用 Gradle 构建强制工件/模块名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30575921/