我設法建立類似的配置既maven
和maven-publish
gradle這個插件。
在我來說,我使用自定義的jar任務自定義配置,但它應該工作,因爲artifacts { ... }
在這兩種情況下使用。
隨着maven
插件,您build.gradle
看起來像:
apply plugin: "java"
apply plugin: "maven"
configurations {
foo // Custom configuration for the artifact I want to build and publish
}
// Dependencies for Java configurations (nothing to do with foo)
dependencies {
compile "foo:foo:1.1"
testCompile "bar:bar:2.2"
}
// Custom task
task generateFoo(type: JavaExec) {
ext.outputFile = new File(buildDir, "foo.bar")
...
}
artifacts {
foo file: generateFoo.outputFile, builtBy: generateFoo
}
uploadFoo {
repositories {
mavenDeployer {
pom.scopeMappings.with {
mappings.clear()
addMapping(300, configurations.foo, 'runtime')
}
pom.artifactId = 'other artifact id than main jar'
...
}
}
}
該解決方案是由以下螺紋的啓發:
http://gradle.1045684.n5.nabble.com/pom-generation-and-inherited-dependencies-td1436197.html
注行:
addMapping(300, configurations.foo, 'runtime')
您可以添加其他配置,或使用其他maven範圍'運行時'範圍。
300代表優先級,在這種情況下不重要。
利用這個解決方案是,我們有超過依賴性及其映射相當精細的控制。缺點是這對install
任務不起作用。我們需要爲安裝任務設置不同的poms,這可能是可能的,但這超出了我的理解。
替代與maven-publish
插件的使用:
apply plugin: "java"
apply plugin: "maven-publish"
configurations {
foo // Custom configuration for the artifact I want to build and publish
}
// Dependencies for Java configurations (nothing to do with foo)
dependencies {
compile "foo:foo:1.1"
testCompile "bar:bar:2.2"
}
// Custom task
task generateFoo(type: JavaExec) {
ext.outputFile = new File(buildDir, "foo.bar")
...
}
artifacts {
foo file: generateFoo.outputFile, builtBy: generateFoo
}
publishing {
publications {
foo(MavenPublication) {
from new org.gradle.api.internal.java.JavaLibrary(\
configurations.api.artifacts.toArray()[0], \
configurations.api.allDependencies)
artifactId 'other artifact id than main jar'
}
}
repositories {
maven { ... }
}
}
gradle tasks
會給你可以發佈命令:
publish - Publishes all publications produced by this project.
publishFooPublicationToMavenLocal - Publishes Maven publication 'foo' to the local Maven repository.
publishFooPublicationToMavenRepository - Publishes Maven publication 'foo' to Maven repository 'maven'.
publishToMavenLocal - Publishes all Maven publications produced by this project to the local Maven cache.
...
maven-publish
替代的advantege是,它會爲本地和遠程Maven倉庫工作。缺點可能是我們正在使用未來可能會更改的內部API,並且所有依賴關係都映射到「運行時」maven範圍。另外MavenPublication片段會更加冗長,如果我們想使用其他的Maven作用域或者應用一些作用域映射,將會使用更多的內部API。
我使用的搖籃1.10
問題可能與應用'java'插件。有可能有解決方案,但我不能告訴它是什麼。新的'maven-publish'插件提供了更多的控制(但仍在孵化)。你可能想先嚐試一下。 –
@PeterNiederwieser:謝謝你的提示,我會試圖找出新的插件,並讓你知道它是否修復了一些事情。 (僅供參考,如果我使用'groovy'插件而不是'java'插件,則也會出現上述問題。) –
應用'groovy'也適用'java'。 –