使用不合适的标记名从Gradle调用Ant
我试图从Gradle调用yGuard Ant任务:使用不合适的标记名从Gradle调用Ant,gradle,groovy,ant,Gradle,Groovy,Ant,我试图从Gradle调用yGuard Ant任务: ant.taskdef(name:'yguard', classname:'com.yworks.yguard.YGuardTask', classpath: '../yguard/yguard-2.9.2.jar;../yguard/retroguard-2.9.2.jar;../yguard/guava-28.1-android.jar;../yguard/asm-7.2.jar') ant.yguard { inoutpair(
ant.taskdef(name:'yguard', classname:'com.yworks.yguard.YGuardTask', classpath: '../yguard/yguard-2.9.2.jar;../yguard/retroguard-2.9.2.jar;../yguard/guava-28.1-android.jar;../yguard/asm-7.2.jar')
ant.yguard {
inoutpair(in: 'in.jar', out: 'out.jar')
attribute(name:'Deprecated, SourceFile, LineNumberTable, LocalVariableTable, LocalVariableTypeTable')
rename(mainclass:"com.....z.Z",logfile:"obfuscation.log",replaceClassNameStrings:"true") {
keep {
class(implements:"java.io.Serializable",classes:"private",methods:"private",fields:"private") {
patternset {
include name:"org.**.*"
include name:"com.google.**.*"
include name:"com.sun.**.*"
// ...
}
}
}
}
}
我已经习惯于从Gradle调用Ant,但是这里我被标签名卡住了,名为
。当然,Groovy与getClass()方法相混淆
我尝试了以下备选方案(如本文所建议的:):
ant.class
=>相同
ant.“class”
=>不知道它能做什么,但不起作用:)
但我认为它仍然与getClass()方法混淆
当然,有以下解决方案:
- 使用
来编写XML而不是groovy脚本,但这太容易了;)如果可能的话,我真的很想留在groovy/gradle DSLant.importBuild
- 我可以使用yGuard gradle插件,但我遇到了一些问题
ant.class
和ant.class
正在工作。我希望完整的示例可以帮助其他人将他的ant脚本翻译成Gradle
ant.taskdef(name:'yguard', classname:'com.yworks.yguard.YGuardTask', classpath: '../yguard/yguard-2.9.2.jar;../yguard/retroguard-2.9.2.jar;../yguard/guava-28.1-android.jar;../yguard/asm-7.2.jar')
ant.yguard {
inoutpair(in: 'in.jar', out: 'out.jar')
attribute(name:'Deprecated, SourceFile, LineNumberTable, LocalVariableTable, LocalVariableTypeTable')
rename(mainclass:"com.....z.Z",logfile:"obfuscation.log",replaceClassNameStrings:"true") {
keep {
ant.class(classes:"private",methods:"private",fields:"private") {
patternset {
include name:"org.**.*"
include name:"com.google.**.*"
include name:"com.sun.**.*"
// ...
}
}
}
}
}
原始ant脚本:
<taskdef name="yguard" classname="com.yworks.yguard.YGuardTask" classpath="yguard/yguard-2.9.2.jar;yguard/retroguard-2.9.2.jar;yguard/guava-28.1-android.jar;yguard/asm-7.2.jar" />
<yguard>
<inoutpair in="in.jar" out="out.jar"/>
<!-- Keep all of the attributes for debugging, e.g. -->
<attribute name="Deprecated, SourceFile, LineNumberTable, LocalVariableTable, LocalVariableTypeTable" />
<rename mainclass="com.....z.Z" logfile="obfuscation.log" replaceClassNameStrings="true">
<keep>
<class classes="private" methods="private" fields="private">
<patternset>
<include name="org.**.*" />
<include name="com.google.**.*" />
<include name="com.sun.**.*" />
<include name="com.thoughtworks.**.*" />
<!-- ... -->
</patternset>
</class>
</keep>
</rename>
</yguard>
尽管如此,这一切背后的机制仍然有效;-)我查看了DefaultAntBuilder源代码,但没有多少帮助