gradle 経由で jar をアップロードするには、その jar をパブリッシュ アーティファクトとして宣言し、artifacts クロージャーを使用して特定の構成に追加する必要があります。
apply plugin:'maven'
configurations{
allJars
}
artifacts{
allJars file("path/to/jarFile.jar")
}
動的に作成された uploadAllJars タスクを構成できるようになりました。
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://localhost:8081/artifactory/acme') {
authentication(userName: 'admin', password: 'password');
}
}
}
問題は、複数のアーティファクトをアップロードすることです。これを実現するには、ビルド スクリプトにさらに動的なものが必要です。検出されたすべての jar のパブリッシュアーティファクトの動的作成は、タスクにラップできます。私の例では、discoverAllJars タスクは指定されたフォルダーで jar ファイルを検索するだけです。ここでは、tgz アーカイブ内の jar を検索する独自のロジックを実装する必要があります。
group = "org.acme"
version = "1.0-SNAPSHOT"
task discoverAllJars{
ext.discoveredFiles = []
doLast{
file("jars").eachFile{file ->
if(file.name.endsWith("jar")){
println "found file ${file.name}"
discoveredFiles << file
artifacts{
allJars file
}
}
}
}
}
uploadAllJars タスク内で複数の成果物をアップロードできるようにするには、pom フィルターを使用する必要があります。pom フィルターの詳細については、 http: //www.gradle.org/docs/current/userguide/maven_plugin.html#uploading_to_maven_repositories の gradle ユーザーガイドをご覧ください。
パブリッシュされたアーティファクトの構成を gradle の実行フェーズに移動したため、実行フェーズでも uploadAllJars を構成する必要があります。したがって、configureUploadAllJars タスクを作成します。「discoverAllJars.discoveredFiles」を使用して検出された jar ファイルを参照する方法に注意してください。
task configureUploadAllJars{
dependsOn discoverAllJars
doLast{
uploadAllJars {
repositories {
mavenDeployer {
repository(url: 'http://yourrepository/') {
authentication(userName: 'admin', password: 'password');
}
discoverAllJars.discoveredFiles.each{discoveredFile ->
def filterName = discoveredFile.name - ".jar"
addFilter(filterName) { artifact, file ->
file.name == discoveredFile.name
}
pom(filterName).artifactId = filterName
}
}
}
}
}
}
次に、uploadAllJars と configureUploadAllJars の間に依存関係を追加する必要があります。
uploadAllJars.dependsOn configureUploadAllJars
この例では、検出されたすべての jar ファイルに同じグループとバージョンを使用し、jar 名を artifactId として使用します。これは、pom フィルター メカニズムを使用して好きなように変更できます。
お役に立てば幸いです。
乾杯、ルネ