【发布时间】:2014-09-09 18:04:06
【问题描述】:
从gradlemaven-publish plugin's documentation看,很明显你直接在build.gradle中设置了项目的groupId和version:
group = 'org.gradle.sample'
version = '1.0'
但是,artifactId 似乎取自您正在使用的文件夹的名称。有没有办法明确设置artifactId?
【问题讨论】:
从gradlemaven-publish plugin's documentation看,很明显你直接在build.gradle中设置了项目的groupId和version:
group = 'org.gradle.sample'
version = '1.0'
但是,artifactId 似乎取自您正在使用的文件夹的名称。有没有办法明确设置artifactId?
【问题讨论】:
来自36.2.3. Identity values in the generated POM
publishing {
publications {
maven(MavenPublication) {
groupId 'org.gradle.sample'
artifactId 'project1-sample'
version '1.1'
from components.java
}
}
}
工件 ID 默认为 settings.gradle 中配置的项目名称,而该名称又默认为项目目录的名称。
您需要合适的插件。
plugins {
id 'maven-publish'
}
【讨论】:
settings.gradle(例如rootProject.name = "something")中进行。
与根settings.gradle文件相关,可以通过以下方式更改根项目的名称:
rootProject.name = 'myproject'
但是如果你想更改一个子项目的名称(例如,AndroidStudio 项目的默认“app”子项目),你可以这样做,仍然在根settings.gradle 文件中:
rootProject.children.each {
it.name = ('app' == it.name ? 'MyAppName' : it.name)
}
【讨论】:
这是 maven-publish 插件的正确答案。这是旧版 maven 插件的继任者。
如果像我一样,您被旧插件卡住了,那么“如何为 gradle 项目设置 maven 工件 id”的正确答案是:
uploadArchives {
repositories {
mavenDeployer {
pom.artifactId = 'project-sample'
}
}
}
【讨论】:
如果您有一个多模块项目,并且您希望工件的名称不同于目录(在 settings.gradle 中设置),那么我认为更好的方法是为每个子设置一个 jar 块-project,在那里你可以写下baseName,这将是artifact-id。然后,而不是为每个子项目重写发布/发布块,你只在主 build.gradle 中这样写一次:
对于每个子项目 build.gradle:
jar {
baseName = 'new-artifact-name-A' //A beacause you also have B, C modules...
}
在主 build.gradle 中:
publishing {
publications {
mavenJava(MavenPublication) {
artifactId jar.baseName
from components.java
}
}
}
【讨论】:
为了使用 jenkins 构建 android 并发布到工件,我在应用模块的 build.gradle 中配置了以下设置,用于配置组 ID、工件 ID 和版本。
apply plugin: 'com.android.application'
android {
compileSdkVersion 21
buildToolsVersion "21.1.2"
group "com.company.division.productgroup" //add group id
version "8.8.8" //add version
defaultConfig {
minSdkVersion 9
targetSdkVersion 21
versionCode 32
versionName "$version"
archivesBaseName = "android-appname" //add artifact id
}
【讨论】:
但是,artifactId 似乎取自您正在工作的文件夹的名称。有没有办法明确设置 artifactId?
对此的简单回答是设置jar.baseName,然后覆盖目录名称。
// changes the name of the jar from the directory name
jar.baseName = 'some_arifact_name';
这似乎对我有用。
【讨论】:
在 Gradle 中,您可以设置 jar.archiveName 以覆盖使用工作文件夹的名称...
group = 'com.example'
version = '0.0.1-SNAPSHOT'
jar.archiveName = "myproject-0.0.1-SNAPSHOT.jar"
【讨论】:
您也可以添加条件来更改您的 artifactId。
publishing {
publications {
maven(MavenPublication) {
//adding conditional
artifactId = artifactId == 'original-name' ? 'my-specific-name' : artifactId
from components.java
}
}
}
如果您有很多项目名称要更改,您也可以添加一个开关。
publishing {
publications {
maven(MavenPublication) {
//adding switch
switch(artifactId) {
case 'first-project-original-name':
artifactId = 'my-first-specific-name'
break
case 'second-project-original-name':
artifactId = 'my-second-specific-name'
break
default:
break
}
from components.java
}
}
}
【讨论】: