6

複数の既存の JAR を Maven リポジトリにアップロードする Gradle タスクを実装する必要があります。

注意が必要なのは、JAR のリストが事前にわからないことです。私がそれを機能させたい方法は、最初に特定の「.tar.gz」ファイルをダウンロードし、解凍してから、JARをスキャンし、何らかの命名規則でアップロードすることです(JAR名をartifactIdおよび.tarのバージョンとして使用するなど)。バージョンとして gz)。

Gradleでこれを行う最も簡単な方法は何ですか? 現在、JAR を検索してそれぞれに対して Maven deploy:deploy-file を実行する単純な bash スクリプトですが、その機能を gradle ビルド スクリプトに組み込む必要があります。

理想的には、すべてをアップロードし、「downloadTarGz」タスクに依存する「deployJars」のようなタスクが必要です。

アップデート:

JARを添付せずにPOMをアップロードするのはどうですか? これらの動的に検出された JAR に依存するいくつかの POM を生成し、それらもアップロードする必要があります。「アーティファクト」では、アップロードするファイルを指定する必要があります。

4

1 に答える 1

15

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 フィルター メカニズムを使用して好きなように変更できます。

お役に立てば幸いです。

乾杯、ルネ

于 2013-04-25T23:02:09.633 に答える