如何使用Gradle构建强制工件/模块名称

时间:2015-06-01 14:17:52

标签: gradle

请注意:即使这个问题明确提及Bamboo CIGradle 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

1 个答案:

答案 0 :(得分:2)

请看https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html

您可以指定jar的基本名称或完整存档名称

将其添加到您的jar部分