我正在执行从ant到gradle的迁移。我想我被一些基本的东西卡住了。我有一个执行以下操作的.xml脚本:
<target name="ANTtarget">
<proguard
...
<libraryjar dir="otherfiles/here" />
<outjar name="some.jar"/>
...
</proguard>
<jar destfile="some.jar" update="yes" >
<manifest>
<attribute name="Main-Class" value="some.package.here" />
</manifest>
<zipgroupfileset dir="otherfiles/here" includes="**/*.jar" />
</jar>
</target>
所以,使用proguard,类被混淆,然后打包。我能完成一个相同的混淆,但我不能完成击击。我怀疑这是因为gradle的jar任务中没有"update="yes"功能。
Gradle代码:
task GRADLEtask(type: proguard.gradle.ProGuardTask) {
...
outjar: "some.jar"
...
}
是否有任何解决方案或解决方法来更新jar?也许在我守卫的时候编辑一下舱单?(这里的想法是任务/目标输出是相同的。)
编辑:普通jar类型的任务工作正常;在jar任务中错误地引用了"otherfiles/here"
参考代码:
[你可能不会有同样的问题,因为你很聪明]
task JARitUP (type: Jar, dependsOn: 'GRADLEtask') {
baseName = "some2"
from zipTree('some.jar')
//get all the library jars
def MYjars = fileTree(jarPlace).filter { it.name.endsWith('.jar') }.files.path
MYjars.each { THISjar -> from zipTree("$THISjar") }
manifest {
attributes 'Main-Class': 'some.package.here'
}
}
类似于
apply plugin: 'java'
configurations {
proguard
}
dependencies {
"com.foo:proguard:1.2.3"
}
jar {
manifest {
attributes('Main-Class': 'some.package.here')
}
}
task proguard {
inputs.file jar.archivePath
outputs.file jar.archivePath // is this correct?
doLast {
ant.taskdef(name: 'proguard', classname: 'foo.bar.ProguardTask', classpath: configurations.proguard.asPath)
ant.proguard {
libraryjar(dir: 'otherfiles/here') // not sure what this does
outjar(name: jar.archivePath)
}
}
}
assemble.dependsOn proguard
proguard.dependsOn jar
这只是一个猜测,但可能是你直接调用你的GRADLEtask
混淆代码?
尝试使用dependsOn
来确保jar
任务之前调用了您的混淆任务,类似于您的build.gradle
jar.dependsOn(obfuscate)
然后调用gradle jar