2016-04-01 55 views
8

私はuploadArhivesをMavenリポジトリ.aarに公開しています。ビルド時にAndroid gradle uploadArchives

しかし、私はいつもコンソールからgradlew uploadArhivesを実行しなければなりません。すべてのビルドやリリースビルドを呼び出すためのコード作成方法は?

uploadArchives { 
    repositories { 
     mavenDeployer { 
      def credentials = [ 
        userName: NEXUS_USERNAME, 
        password: NEXUS_PASSWORD 
      ] 
      repository(url: MAVEN_REPO_URL, authentication: credentials) 
      pom.artifactId = 'aaa' 
      pom.version = version 
      pom.packaging = 'aar' 
      pom.groupId = 'bbb' 

     } 
    } 
} 

EDIT

私が思うように、私たちは関数を定義することができます

def uploadToMaven = { 
    uploadArchives 
} 

しかし、どのようにすべてのビルドでそれを実行するには?

+0

あなたはtravis.ciやビルド自動化スクリプト(.SHファイル)の別の並べ替えを作成する方法について考えたことがありますか?確かにgradlewや他の端末ツールは、アプリケーションを構築するためのオプションがあります。そこから、これらのアクションを実行するたびにビルドスクリプトを実行するのと同じくらい簡単です。 –

答えて

2

私は、多くのモジュールと1つのメインアプリケーションを持つ複雑なプロジェクトを持っています。 これらのモジュールの2つに "uploadArchives"を追加しました(アンドロイドライブラリがあるためです)。このようにして、Mavenのライブラリを私のメインアプリケーションから単にアップロードuploadArchivesを実行するか、またはgradleを使ってこのタスク "uploadArchives"を呼び出して公開することができます。

"build.finalizedBy(uploadArchives)"という、あなたが公開したいライブラリのbuild.gradleでこれを使うことができます。例えば

:すべてのビルド、uploadArchives意志を開始した後

android { 
    compileSdkVersion 23 
    buildToolsVersion "23.0.2" 

    defaultConfig { 
     minSdkVersion 17 
     targetSdkVersion 23 
     versionCode 2 
     versionName "2.0" 
    } 

    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 


    compileOptions { 
     sourceCompatibility JavaVersion.VERSION_1_7 
     targetCompatibility JavaVersion.VERSION_1_7 
    } 

    lintOptions { 
     abortOnError false 
    } 


} 


build.finalizedBy(uploadArchives) 

task wrapper(type: Wrapper) { 
    gradleVersion = "2.8" 
} 

dependencies { 
    compile project(':spfshared') 
    compile 'com.google.code.gson:gson:2.4' 
} 

//task for Sonatype Nexus OSS 
uploadArchives { 
    repositories { 
     mavenDeployer { 
      repository(
        url: "${nexusUrl}/content/repositories/releases") { 
       authentication(userName: nexusUsername, password: nexusPassword) 
      } 
      snapshotRepository(
        url: "${nexusUrl}/content/repositories/snapshots") { 
       authentication(userName: nexusUsername, password: nexusPassword) 
      } 

      pom.version = "2.0.0.1" 
      pom.artifactId = "spflib" 
      pom.groupId = "it.polimi.spf" 
     } 
    } 
} 

私はこのソリューションを試してみました。

また、「build.dependsOn myTaskName」のソリューションを試してみましたが、成功しませんでした。あなたが試してみたいですが、私のAndroidStudioでは、最初の解決策です。

PS:「gradlew -q build」コマンドを使用して解決策をテストし、Android Studioのメインモジュール(特にメインアプリケーション)から「build」タスクを実行しています。

リリースごとに「uploadArchives」を呼び出す場合は、単に「build」をリリースタスクに置き換えます。

更新: が、私はこれらのコードラインでも試してみました:

defaultTasks 'uploadArchives' 

clean.finalizedBy(uploadArchives) 
assembleDebug.finalizedBy(uploadArchives) 
assembleRelease.finalizedBy(uploadArchives) 

しかし、時には、彼らは「uploadArchives」を何度も呼び出すと、私はそれは良い考えではありませんと思います。私は全体の時間のために試してみました

何を求めていることは非常に困難である... :)

+0

はい、これは素晴らしいです!しかし、私は "gradlew -q build"と入力すると動作しています。 ビルドごとにアーティファクトをアップロードするにはどうすればよいですか?私はビルドまたは実行ボタンを押すと? –

+0

だから、「gradlew -q build」と入力する価値はあるのですか?gradlew uploadArhives ' –

+1

は別の実験的な解決策で更新されました:) –

2

ちょうどあなたのbuild.gradleに次の行を追加します、

build.finalizedBy(uploadArchives) 

これは、ビルドタスクとuploadArchivesタスク間のタスクの依存関係を作成しますuploadArchivesが自動的に呼び出されるように毎回のビルドが正常に実行されます。

+0

どこに置くの? 私は 'afterEvaluate {project - >'で試しましたが、それは助けになりません –

+0

build.gradleのルートレベルに配置してみてください。 – RaGe

+0

私はそれをどこでもgradleファイルに置くことを試みました。 –

関連する問題