2016-07-06 43 views
0

我从gradle构建中打包了我的构建文物。这是一个Android Studio项目。通过传递参数重命名gradle中的文件

我有成功创建一个包含两个罐子的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") 
    } 
} 

我正与gradle -PversionString="123" :sdk:renameArtifacts

调用它我在doLast关闭一个println,可以看到我的串插工作正常,因为它输出my-123.zip

但是,'my.zip'未重命名为'my-123.zip'。它仍然为'my.zip',实际上会生成一个大小为零字节的文件,并且不再可以作为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

renameCopyProcessingSpec的方法,即配置在操作执行一些的重命名的任务。如果将其包装在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