请注意:即使这个问题明确提及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" 构建密钥 " (实质上,标识服务器上构建的唯一键/标签)。如果你对我所谈论的内容一无所知,我认为这不重要。 要了解的重要事项是,Bamboo将检查myapp
的源代码到CI服务器上名为 MYAPP-KEY
的文件夹。因此,本地myapp/
是我项目的根,但在CI MYAPP-KEY
上是我项目的根。
重点是我没有在我的Gradle配置中明确定义某些,因此Gradle似乎正在使用项目根的名称来生成内置JAR的名称。 这是什么"东西"以及如何/在何处定义它?期望的最终目标是在本地和CI上生成build/libs/myapp-1.0.0.jar
。
答案 0 :(得分:2)
请看https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html
您可以指定jar的基本名称或完整存档名称
将其添加到您的jar
部分