2016-07-06 19 views
0

私はグラデルビルドからビルドアーチファクトをパッケージ化しています。これはAndroid Studioプロジェクトです。パラメータを渡したファイル名をgradleに変更しました

2つのjarを含むzipファイルを正常に作成するタスクがあります。 zipファイルの名前が「my.zip」であるとします。

私は次のGradleのタスクがあります。

task renameArtifacts (type: Copy) { 
    from ('build/') 
    include 'my.zip' 
    destinationDir file('build/') 
    doLast { 
     println "my-${versionString}.zip" 
     rename('build/my.zip', "build/my-${versionString}.zip") 
    } 
} 

そして私は、私はdoLast閉鎖にprintlnを持っていると私の文字列補間はそれとして正常に動作している見ることができますgradle -PversionString="123" :sdk:renameArtifacts

でそれを呼んでいるがmy-123.zipを出力します。

ただし、'my.zip'の名前は'my-123.zip'に変更されません。それは'my.zip'のままであり、実際にはサイズが0バイトのファイルになり、もはやzipファイルとして開くことはできません。

私は明らかにどこかで間違っていますが、どこですか?

全Gradleのファイル:

apply plugin: 'com.android.library' 

android { 
    compileSdkVersion 22 
    buildToolsVersion "23.0.3" 

    defaultConfig { 
     minSdkVersion 14 
     targetSdkVersion 14 
     versionCode 1 
     versionName "1.0" 
    } 
    buildTypes { 
     release { 
      minifyEnabled false 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
     } 
    } 
} 

dependencies { 
    compile fileTree(include: ['*.jar'], dir: 'libs') 
    testCompile 'junit:junit:4.12' 
    compile 'com.android.support:support-v4:22.2.0' 
    compile files('libs/urbanairship-lib-3.1.0.jar') 
    compile files('libs/jackson-annotations-2.2.2.jar') 
    compile files('libs/jackson-core-2.2.2.jar') 
    compile files('libs/jackson-databind-2.2.2.jar') 
} 

task updateVersionNumber() << { 
    ant.replace(file: 'src/main/java/com/my/Version.java', token: '{{VERSION}}', value: versionString) 
} 

task javadoc(type: Javadoc) { 
    source = android.sourceSets.main.java.srcDirs 
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) 
    destinationDir = file("build/javadoc") 
    failOnError false 
} 

task createJavaDocJar(type: Jar) { 
    from ('build/javadoc') 
    destinationDir file('build') 
    baseName = 'my_doc' 
} 
createJavaDocJar.dependsOn(javadoc) 

task packageMyJarAndDependencies(type: Jar) { 
    from (zipTree('libs/jackson-annotations-2.2.2.jar')) { 
     exclude 'META-INF/maven/' 
     exclude 'META-INF/services/' 
    } 
    from (zipTree('libs/jackson-core-2.2.2.jar')) { 
     exclude 'META-INF/maven/' 
     exclude 'META-INF/services/' 
    } 
    from (zipTree('libs/jackson-databind-2.2.2.jar')) { 
     exclude 'META-INF/maven/' 
     exclude 'META-INF/services/' 
    } 
    from (zipTree('libs/urbanairship-lib-3.1.0.jar')) 
    from (zipTree('build/intermediates/bundles/release/classes.jar')) 
} 

task createFinalJar(type: Copy) { 
    from('build/libs/') 
    into('build') 
    include('sdk.jar') 
    rename('sdk.jar', 'my.jar') 
} 
createFinalJar.dependsOn(clean, build, packageMyJarAndDependencies) 
packageMyJarAndDependencies.mustRunAfter build 
build.mustRunAfter clean 

task zipArtifacts(type: Zip) { 
    from ('build/') 
    from ('build/libs') 
    include 'my_doc.jar' 
    include 'my.jar' 
    baseName = 'my_lib' 
    destinationDir file('build') 
} 
zipArtifacts.dependsOn(createFinalJar, createJavaDocJar) 

task renameArtifacts (type: Copy) { 
    from ('build/') 
    into('build') 
    include 'my_lib.zip' 
    doLast { 
     println "my_lib-${versionString}.zip" 
     rename "my_lib.zip", "my_lib-${versionString}.zip" 
    } 
} 
renameArtifacts.dependsOn(zipArtifacts) 
+0

これを試してみてください:あなたがあなたのビルドの一部として作成されたカスタムアーカイブは自動的に任意の構成に割り当てられていないことに注意することが重要である アーティファクト{ アーカイブMYJAR }:MYJAR(ジャータイプ)タスク。この割り当てを明示的に行う必要があります。 – PN10

+0

私は分かりません。私はただファイルの名前を変更しようとしています – barry

+0

あなたのbuild.gradleファイルを投稿してください – PN10

答えて

1

renameは運転しながら、いくつかのrenamingsを実行するタスクを設定しCopyProcessingSpecの方法、です。 doLastにラップすると、コピーは既に行われており、名前の変更は行われません。さらに、リネームには相対パスまたは絶対パスではなく、ファイル名のみが使用されます。これは動作するはずです:

project.ext.versionString = versionString 
task renameArtifacts (type: Copy) { 
    from ('build/') 
    include 'my.zip' 
    destinationDir file('build/') 
    rename 'my.zip', "my-${project.versionString}.zip" 
} 

編集:$ versionStringはタスクではアクセスできません。余分なプロジェクトプロパティを使用することは、これらのタスクをタスクに渡す方法を提案することです(here参照)。

+0

わかりました。しかし、私がdoLastメソッドを試していたのは、そうでなければ、 "タスクの 'versionString'プロパティを見つけることができませんでした:sdk:renameArtifacts '"です。 versionStringを次のようにコマンドラインに渡しています:gradle -PversionString = "123":sdk:renameArtifacts – barry

+0

渡されたversionStringパラメータにはどうすればアクセスできますか? – barry

+0

編集された回答を参照してください。 – majk

関連する問題