使用不合适的标记名从Gradle调用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(

我试图从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(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()方法混淆

当然,有以下解决方案:

  • 使用
    ant.importBuild
    来编写XML而不是groovy脚本,但这太容易了;)如果可能的话,我真的很想留在groovy/gradle DSL
  • 我可以使用yGuard gradle插件,但我遇到了一些问题
yGuard的例子就是一个例子。我很想了解下面使用的是哪种机制,以及如何强制执行我想要的行为(Groovy非常强大,我很确定,有一种方法)

对不起,最后:

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源代码,但没有多少帮助