我想在我的Gradle构建中使用复制/粘贴检测器.
这就是为什么我决定将以下Ant任务(我在这里找到)转换为Gradle语法:
<target name="cpd">
<taskdef name="cpd" classname="net.sourceforge.pmd.cpd.CPDTask" />
<cpd minimumTokenCount="100" outputFile="/home/tom/cpd.txt">
<fileset dir="/home/tom/tmp/ant">
<include name="**/*.java"/>
</fileset>
</cpd>
</target>
Run Code Online (Sandbox Code Playgroud)
这就是翻译目前的样子:
check << {
ant.taskdef(name: 'cpd', classname: 'net.sourceforge.pmd.cpd.CPDTask', classpath: configurations.pmd.asPath)
ant.cpd(minimumTokenCount: '100', outputFile: file('build/reports/pmd/copyPasteDetector.txt').toURI().toString()) {
fileset(dir: 'src'){
include(name: '**.java')
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,调用gradle check
产生了一个net.sourceforge.pmd.cpd.ReportException
,堆栈跟踪在这里.
如何使用Gradle 1.9使用复制/粘贴检测器扫描源代码?
谢谢!
我使用exec从ant build.xml多次调用命令行程序.此命令行程序针对不同情况采用可变数量的参数.
目前我使用exec多次调用此外部程序,代码看起来很混乱.例如:
<exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
<arg line="tests.py"/>
<arg line="-h aaa"/>
<arg line="-u bbb"/>
<arg line="-p ccc"/>
</exec>
<exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
<arg line="tests.py"/>
<arg line="-h ddd"/>
<arg line="-u eee"/>
<arg line="-p fff"/>
<arg value="this is second test"/>
</exec>
<exec dir="./deploy_abc/bin" executable="python" failonerror="true" >
<arg line="tests.py"/>
<arg line="-u bbb"/>
<arg line="-p ccc"/>
<arg value="this is another test"/>
</exec>
Run Code Online (Sandbox Code Playgroud)
所以我打算使用macrodef重构这个build.xml文件.
我的问题是如何将可变数量的参数传递给macrodef.如上所示,我需要根据场景将不同的参数传递给exec-ed程序.
根据文档isset子句"测试是否已在此项目中设置给定属性".我不明白当设置属性时wheter isset返回true或false在下面的代码片段中,当未设置env.JAVA_HOME时,java.pass.home设置为somval.
<condition property="java.passed.home" value="somval">
<isset property="${env.JAVA_HOME}"/>
</condition>
Run Code Online (Sandbox Code Playgroud)
这个片段适用于我的要求,但我认为正确的代码片段应该是这样的,因为我想在另一个属性不可用时设置属性
<condition property="java.passed.home" value="somval">
<not>
<isset property="${env.JAVA_HOME}"/>
</not>
</condition>
Run Code Online (Sandbox Code Playgroud)
有人可以澄清一下吗?提前致谢
我正在将ant项目迁移到maven,这个项目很不寻常:它在这些编译步骤之间使用了两个编译步骤和代码生成步骤.整个构建过程可以描述如下:
我发现了一些建议创建自定义生命周期的链接,但我不知道从哪里开始.如果有人可以指出类似的项目配置真的很棒.
用maven实现这个目标的最简单方法是什么?我想我应该使用ant maven插件,但我仍然不明白如何使它编译源两次并在第一次编译步骤后将其指向生成的源.
更新: 请在此处查看解决方案.
感谢大家的帮助!
我在尝试使用Ant编译项目时遇到错误,它声称"[javac] javac:无效的目标版本:7"并导致构建失败.
我在Mac OSX Mavericks机器上运行javac版本1.7.0_40.Ant版本:Apache Ant(TM)版本1.8.3于2012年2月26日编译
只有在尝试使用Ant进行编译时才会出现问题.使用命令行中的javac编译项目中的单个文件(使用以下命令):
javac -d /Users/username/git/appinventor-sources/appinventor/common/build/classes/CommonUtils -classpath /Users/username/git/appinventor-sources/appinventor/common/build/classes/CommonUtils:/Users/username/git/appinventor-sources/appinventor/lib/guava/guava-14.0.1.jar -target 7 -encoding utf-8 -g:lines,vars,source -source 7 common/src/com/google/appinventor/common/utils/*
Run Code Online (Sandbox Code Playgroud)
build-common.xml文件为javac指定:
<attribute name="source" default="7"/>
<attribute name="target" default="7"/>
Run Code Online (Sandbox Code Playgroud)
相同的构建文件适用于其他人,可以在以下网址找到:https: //github.com/cdlockard/appinventor-sources/blob/master/appinventor/build-common.xml
看完这个,我检查了早期的Java版本我的机器上,并没有发现任何.
根据这个问题,我补充道
executable="/usr/bin/javac"
Run Code Online (Sandbox Code Playgroud)
到build-common.xml文件以确保它找到了正确的Java编译器,但错误仍在继续.
命令行输出如下:
init:
CommonUtils:
[javac] Compiling 1 source file to /Users/username/git/appinventor-sources/appinventor/common/build/classes/CommonUtils
[javac] javac: invalid target release: 7
[javac] Usage: javac <options> <source files>
[javac] use -help for a list of possible options
BUILD FAILED
/Users/username/git/appinventor-sources/appinventor/build.xml:16: The following …
Run Code Online (Sandbox Code Playgroud) 我正在使用Ant的自动安装选项但仍然jenkins抱怨它无法找到可执行文件.我错过了什么吗?我已经给出了我们使用的蚂蚁版本的路径.它已成功下载并解压缩到服务器上,但它仍然抱怨它无法找到可执行文件.
刚升级到含有ant 1.9.2的eclipse luna,我的<script>
目标停止在这段代码中工作:
<script language="javascript"><![CDATA[
importPackage(java.net);
importPackage(java.io);
...
Run Code Online (Sandbox Code Playgroud)
错误信息:
javax.script.ScriptException: ReferenceError: "importPackage" is not defined in <eval> at line number 2
Run Code Online (Sandbox Code Playgroud) 您能否解释一下Apache Ant中调试级别属性var,行和源的含义.很明显,这有助于生成帮助属性debug = true的所有调试信息.
定义debuglevel ="lines,vars,source"的目的是什么?这会限制调试信息吗?
如果每个值1.lines 2. vars 3. source?
我是否需要启用调试才能使此属性有效?
规范说,
要附加到-g命令行开关的关键字列表.除现代,经典(ver> = 1.2)和jikes外,所有实现都会忽略这一点.合法值为none或以逗号分隔的以下关键字列表:lines,vars和source.如果未指定debuglevel,则默认情况下不会将任何内容附加到-g.如果未打开调试,则将忽略此属性.
很多zip文件都有一个根文件夹,如何解压缩zip文件并删除根文件夹?
我知道有globmapper
:
<unzip dest="${dest.path}">
<fileset dir="${source.path}">
<include name="**/zipfile*.*.zip" />
</fileset>
<mapper>
<globmapper from="rootFolder/*" to="*" />
</mapper>
</unzip>
Run Code Online (Sandbox Code Playgroud)
但是,如果我不知道根文件夹的名称呢?通配符不起作用,例如
<globmapper from="root*Folder/*" to="*" />
Run Code Online (Sandbox Code Playgroud)
有没有办法使用通配符或没有根文件夹进行upack的映射器/函数?
我是新来的蚂蚁,并了解它的一些基本的东西,喜欢有困难task
和target
.
在线文档和书籍说这target
是整个构建过程的一个阶段,同时task
也是最小的工作.但是,我发现很难理解这究竟是什么意思,
有人可以用实例深入解释Ant 中的target
s和task
s是什么?