ant 相关问题

Apache Ant(以前称为Jakarta Ant)是一个基于XML的声明式构建工具,最初是为Java项目创建的。它提供了一组丰富的标准任务,用于执行大多数常见的构建操作,例如编译Java源代码,构建存档和运行测试。 Ant的功能可以通过自定义任务和宏进行扩展。

lombok 与 Ant 使用 eclipse 编译器问题

我们有一个通过 Ant 编译的项目,我们遇到了一些问题,人们编写的代码只能通过 eclipse 编译器编译,而不能通过常规 javac 编译,因此我们通过传递...来更改编译器

回答 1 投票 0

Ant:如何减去两个属性(包含时间戳)?

我正在编写一个ant脚本。在这个特定部分中,我需要获取当前月份以及上个月。我在想类似的事情 我正在编写一个 Ant 脚本。在这个特定部分中,我需要获取当前月份以及上个月。我在想类似的事情 <tstamp> <format property="thismonth" pattern="MMyy"/> <!-- 0210 by february 2010--> </tstamp> <!--I'd like to get 0110 (january 2010) here, but can't imagine how--> <property name="priormonth" value="?"> 我一直在阅读有关房产助手的内容,但我找不到我需要的东西。接下来我可以尝试什么? 您可以使用自定义 JavaScript scriptdef: <project default="build"> <target name="build"> <echo message="Hello world"/> <setdates/> <echo message="thismonth ${thismonth}"/> <echo message="priormonth ${priormonth}"/> </target> <scriptdef name="setdates" language="javascript"> <![CDATA[ importClass(java.text.SimpleDateFormat); importClass(java.util.Calendar); today = new Date(); cal = Calendar.getInstance(); cal.setTime(today); cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1); priormonth = cal.getTime(); fmt = new SimpleDateFormat("MMyy"); self.getProject().setProperty('thismonth', fmt.format(today)); self.getProject().setProperty('priormonth', fmt.format(priormonth)); ]]> </scriptdef> </project> 我确信某些正则表达式可以带来奇迹,但我会简单地创建一个自定义任务。 在您的任务中,您可以使用 getProjet().setProperty() 方法定义新属性。 类似以下内容就足够了: public class PreviousMonthTask extends Task { private String currentDate; private String propertyName; public void setCurrentDate(String currentDate) { this.currentDate = currentDate; } public void setPropertyName(String propertyName) { this.propertyName = propertyName; } @Override public void execute() throws BuildException { // calculate the previous month String previousMonth = ...; getProject().setProperty(this.propertyName, previousMonth); } } 剩下要做的就是定义一个带有类链接的属性文件: previousmonth = org.myproject.PreviousMonthTask 当您加载任务时(请参阅 Ant 文档),您只需使用以下命令调用您的任务: <previousmonth propertyName="previous" currentDate="${current}"/> ANT 的 tstamp 任务 有一个偏移元素: <tstamp> <format property="twoDaysAgo" pattern="yyyy-MM-dd" offset="-2"/> </tstamp> 这会返回两天前的时间戳。 如果您的模式是几个月,我希望您能够做同样的事情,那么偏移量可能会在几个月内起作用。 其实你可以使用: <tstamp> <format property="twoDaysAgo" pattern="yyyy-MM-dd" unit="day" offset="-2"/> </tstamp> 因此,您在前 2 个月使用: <tstamp> <format property="twoDaysAgo" pattern="yyyy-MM-dd" unit="month" offset="-2"/> </tstamp>

回答 4 投票 0

如何将一个 Gradle 脚本导入到另一个 Gradle 脚本中?

我有一个复杂的 Gradle 脚本,它包含了围绕构建多个 NetBeans 项目并将其部署到多个环境的大量功能。 该脚本运行得很好,但本质上......

回答 5 投票 0

javac 错误“代码太大”?

我有一个单元测试,其中我静态定义了一个相当大的字节数组(超过8000字节)作为我不想每次运行单元测试时读取的文件的字节数据。 私有静态最终由...

回答 3 投票 0

javac默认的内存初始大小和内存最大大小?

javac 参数 memoryInitialSize 和 memoryMaximumSize 的默认值是多少?它是否从 env/os 属性或设置中获取这些值? javac参数memoryInitialSize和memoryMaximumSize的默认值是多少?它是否从 env/os 属性或设置中获取这些值? <javac srcdir="@{srcdir}" destdir="@{destdir}" includeantruntime="@{includeantruntime}" debug="@{debug}" deprecation="@{deprecation}" target="@{target}" source="@{target}" fork="@{fork}" executable="@{executable}" memoryInitialSize="@{memoryInitialSize}" memoryMaximumSize="@{memoryMaximumSize}"> <compilerarg compiler="${build.compiler}" line="${build.compiler.args}"/> <javac-elements/> </javac> 文档说,如果 javac 在外部运行,ant 将使用标准 VM 内存设置。正如 dkatzel 在他的评论中指出的那样,这些 VM 设置将在here 进行讨论。

回答 1 投票 0

特定类文件的 Ant 编译器警告

我想忽略特定文件引发的 ant 警告。 为什么有警告并不是强制性的,我只想找到一种方法,忽略来自特定类别的警告...

回答 4 投票 0

如何从源代码构建freemarker?

我有一个项目 git clone --depth 1 --branch v2.3.30 https://github.com/apache/freemarker.git 并想从源代码构建它。为此我发出命令 蚂蚁罐 具有以下输出 └─$ 蚂蚁-v...

回答 2 投票 0

适用于 Java 的“类似 RVM”工具

我正在寻找一个可以让我切换正在运行的 Java 实现的工具,例如 Ruby 的 RVM(或 RBENV)。我知道 Debian 系统提供了替代机制,我可以设置

回答 5 投票 0

antd form.setFieldValue 未按预期工作

我正在使用 form.setFieldValue 修改包含序列号和数字组合的表单字段值。但它只需要数字部分,即使我把它们放在一起并创建了一个......

回答 1 投票 0

无法使用ant和闭包编译器编译javascript,因为Jquery的$未声明

我正在尝试让 Google Closure Compiler 编译我使用 Jquery 的 javascript 代码,但我不断收到变量 $ 未声明,有没有办法让它看到 $ 变量。难道是……

回答 3 投票 0

如何在没有 ant 的情况下从命令行编译使用 Google Webdriver 的 java 应用程序[重复]

我想编译一个使用谷歌网络驱动程序的示例代码。 我将 webdriver 保存到 /home/iyo/webdriver 中。我的代码是: 包 com.googlecode.webdriver.example; 导入 com.googlecode.webdrive...

回答 1 投票 0

Amazon Corretto 21 和 DITA-OT 4.2.3 的 Ant 脚本无法识别 Nashorn

我正在将自定义插件迁移到 DITA OT 4.2.3,这需要更新版本的 JDK。我们使用的是 Amazon Corretto 21.0.3.9.1。我们有一个包含 JavaScript 的 Ant 构建脚本。自从...

回答 0 投票 0

运行“ant test”命令时出现“java.lang.IllegalStateException: CONSTANT_info: invalid tag value [18]”如何解决?

我有一个使用apache-ant-1.10.9构建的spring项目。使用tools-2.14版本。在本地环境中运行“ant test”命令时,构建失败并收到错误消息“...

回答 1 投票 0

将ant脚本中exec元素的输出定向到日志文件

我正在从 ant 文件执行 shell 脚本。我想在日志文件“buillog-perform.txt”中捕获 shell 脚本的标准输出。 下面是我的代码摘录。我的完整版本很好。但是

回答 2 投票 0

包 org.apache.tools.ant.util 不存在

我正在尝试使用 maven-antrun-plugin 将 Ant 项目包装在 Maven 中。 这是我的插件配置 org.apache.maven.plugins <

回答 1 投票 0

如何在 Ant 脚本中调用 Maven 目标?

是否可以在 Ant 脚本中调用或执行 Maven 目标? 假设我有一个名为“distribute”的 ant 目标,在其中我需要从另一个 pom.xml 调用 maven“编译”目标。

回答 13 投票 0

更新现有 WAR 文件中的文件

我正在尝试使用 ANT WAR 任务更新现有 WAR 文件内的文件。 我需要用 HDD 中的新文件替换 WAR 文件夹中的一组 xml 文件。 我正在尝试使用 ANT WAR 任务更新现有 WAR 文件内的文件。 我需要用 HDD 中的新文件替换 WAR 文件夹中的一组 xml 文件。 <war destfile="myApp.war" update="true" > <zipfileset dir="<PathToStubsFolderOnHDD>" includes="**/*.xml" prefix="<PathToStubsFolderInWAR>"/> </war> 如果原始 WAR 没有同名的 xml,这可以正常工作。但是,如果原始 WAR 包含同名的 xml; WAR 任务不会使用 HDD 中的文件更新它们。 ANT WAR 任务文档如下: 更新 |指示是否更新或覆盖目标文件(如果已存在)。默认为“假”。 重复|发现重复文件时的行为。有效值为“添加”、“保留”和“失败”。默认值为“添加”。 如果我使用 update="false";原始 WAR 中的所有其他文件都将被删除,仅存储新的 xml。 使用duplicate="add"也没有任何效果。 关于如何实现这一点有什么建议吗? 似乎使用 update=true 选项,war 文件比您要更新的文件新。 有人建议应用带有“0”的touch任务来解决该问题。 zip 任务仅检查您希望添加到现有 zip 的源文件是否比该 zip 更新。解决方法是在添加之前先<touch millis="0" /> zip 文件。 或者你可以做相反的事情: 在对 XML 文件执行 touch 任务之前执行 war 可以实现 工作。 谢谢爱藤! 这是完整的 ANT 脚本: <target name = "UpdateWARWithStubs" description="Updates WAR file with files from Stub folder"> <!-- Use touch to set modification time of all stubs to current time. This will force war task to update stub files inside the war --> <tstamp> <format property="touch.time" pattern="MM/dd/yyyy hh:mm aa"/> </tstamp> <touch datetime="${touch.time}"> <fileset dir="${path.to.stubs.on.hdd}" /> </touch> <war destfile="myApp.war" update="true"> <zipfileset dir="${path.to.stubs.on.hdd}" prefix="${path.to.stubs.in.war}"/> </war> </target> 这是我替换 zip(.war) 文件中现有文件的解决方案。初始状态是我有 build.xml 来为 Tomcat6 服务器编译和打包 mywebapp.war 。 Tomcat7 服务器需要在 war 文件中进行少量配置更改。 项目子文件夹 web 和 webT7 是 CVS 控制的文件夹,我不想无缘无故地触及时间戳。以下技巧可以完成这项工作。 照常编译并创建 web/WEB-INF/lib/mywebapp.jar 文件 目标“war”从 Web 文件夹创建 tomcat6 存档 webT7 子文件夹中有一些特定文件,例如 META-INF/context.xml 和 WEB-INF/web.xml 文件,我必须针对每个 tomcat 版本进行一些修改。 创建 mywebapp.war.zip 文件的副本 将文件从 webT7 子文件夹复制到新的构建临时文件夹,不要使用preservelastmodified属性!这为每个文件提供了一个新的时间戳,因此它的触摸无需单独的触摸命令。 故障安全触摸新的 zip 以放置过去的时间戳,这可以确保 zip 更新正常工作。 使用 zip 任务更新 mywebapp.war_T7.zip 内容,它应该替换现有文件,因为我们复制了它们而没有保留原始时间戳。 我将 webT7 内容复制到临时构建文件夹的原因是内容管理系统。我不想无缘无故地更改原始存储库文件的时间戳。无论我使用什么 Tomcat 目标,其他所有编译、jar、war 目标始终相同。 Zip update="true" 属性如前所述不会替换文件,仅当 zip 的文件比我们提供的文件旧时才会更新。如果我有 web/config.jsp(2013-01-21 14:01:01) 和 webT7/config.jsp(2012-12-21 15:02:03) 文件,这可能会带来问题。文件未被替换。 build.xml 文件中的片段 <target name="war" depends="compile,jar" description="Create a .war file"> <delete file="${name}.war.zip" /> <zip destfile="${name}.war.zip" basedir="./web/" excludes=" **/CVS* " /> </target> <target name="warT7" depends="war" description="Create a .war file for Tomcat7"> <delete dir="${build}" /> <mkdir dir="${build}" /> <delete file="${name}.war_T7.zip" /> <copy file="${name}.war.zip" tofile="${name}.war_T7.zip" overwrite="true" preservelastmodified="true" /> <copy todir="${build}" overwrite="true"> <fileset dir="./webT7" /> </copy> <touch datetime="01/31/1981 01:00:00 AM" file="${name}.war_T7.zip" /> <zip destfile="${name}.war_T7.zip" update="true"> <zipfileset dir="${build}" prefix="" /> </zip> <delete dir="${build}" /> </target> 也许最简单的方法是将 war 分解到临时目录,进行更改,然后重建 war。不可否认,这不太好。 这两种触摸选项都不适合我。由 ant 脚本中的 Maven 工件创建的原始 war 文件可能与此有关。最终将 war 文件重新打包成临时文件并覆盖原始 war 文件,如下所示: <target name="update-properties"> <war destfile="target/${war.name}temp" needxmlfile='false'> <zipfileset src="target/${war.name}" includes="**/*" excludes="${path.to.properties.in.war}" /> <zipfileset file="${path.to.new.properties}" fullpath="${path.to.properties.in.war}" /> </war> <move file="target/${local.war.name}temp" tofile="target/${local.war.name}"/> <delete file="target/${local.war.name}temp"/> </target> 其中 ${path.to.properties.in.war} 可以类似于 "WEB-INF/classes/META-INF/spring/database.properties" 我很有钱,+8613520320431。 我需要女孩,支付$6000/3小时,我可以飞往大多数国家,如果你想来中国北京,我可以提供航班和酒店 请叫我:钱先生。 +8613520320431

ant
回答 6 投票 0

Ant 命令“war”失败,并出现错误“jvxml.xml.lib 不表示 zip 文件集或文件集”

我正在尝试运行 JVoiceXML 演示,但我对所有这些新技术都很陌生。我成功地运行了演示,但 servlet 除外(其中您必须使用 tomcat。问题是:当我尝试...

回答 1 投票 0

Jacoco @Generated 注释不排除具有匿名类方法的类

我正在使用以下注释从 jacoco 覆盖范围中排除类 @Target({ElementType.TYPE,ElementType.METHOD}) 公共@interface ExcludeFromJacocoGenerateReport { } 我想排除以下...

回答 1 投票 0

在ant javac中设置Java的目标版本

我需要使用ant(1.7.0)编译一个jar文件以在特定版本的Java(1.5)下运行。我的机器上目前有 Java 1.6。我尝试过设置: 我需要使用ant(1.7.0)编译一个jar文件以在特定版本的Java(1.5)下运行。我的机器上目前有 Java 1.6。我尝试过设置: <target name="compile"> <javac compiler="javac1.5" target="1.5" srcdir=.../> </target> 我也删除了 <property name="build.compiler" value="modern"/> 并且没有属性文件。我在 Linux/SUSE 上运行 Java 1.6 还有一种简单的方法可以确定 jar 文件中需要哪个版本的 Java。 使用“target”属性并删除“compiler”属性。请参阅此处。所以它应该是这样的: <target name="compile"> <javac target="1.5" srcdir=.../> </target> 这里是直接使用 javac 命令来实现此目的的示例。此信息来自@kon psych 的链接。我知道,这并没有显示蚂蚁是如何做到这一点的 build.xml 但它仍然非常有帮助,我想将这些信息保留在网站上,以防有一天出现 URL 404。 交叉编译示例 以下示例使用 javac 编译将在 1.6 VM 上运行的代码。 % javac -source 1.6 -target 1.6 -bootclasspath jdk1.6.0/lib/rt.jar \ -extdirs "" OldCode.java -source 1.6 选项指定使用 Java 编程语言的 1.6(或 6)版本来编译 OldCode.java。选项 -target 1.6 选项可确保生成的类文件与 1.6 VM 兼容。请注意,大多数情况下,-target 选项的值就是-source 选项的值;在此示例中,您可以省略 -target 选项。 您必须指定 -bootclasspath 选项来指定引导类(rt.jar 库)的正确版本。如果不是,编译器会生成警告: % javac -source 1.6 OldCode.java warning: [options] bootstrap class path not set in conjunction with -source 1.6 如果没有指定正确版本的引导类,编译器将使用旧的语言规则(在本例中,它将使用 Java 编程语言的 1.6 版本)与新的引导类相结合,这可能会产生类文件不适用于旧平台(在本例中为 Java SE 6),因为可能会包含对不存在方法的引用。 应指定源和目标。我建议提供 ant 默认值,这样您就不需要为每个 javac 任务指定源/目标属性: <property name="ant.build.javac.source" value="1.5"/> <property name="ant.build.javac.target" value="1.5"/> 更多信息请参见Java交叉编译笔记。 在我使用的类文件中查找 java 的版本: javap -verbose <classname> 在开始时宣布版本为 minor version: 0 major version: 49 对应Java 1.5 您还可以设置 {{ant.build.javac.target=1.5}} ant 属性来更新任务的默认目标版本。 请参阅 http://ant.apache.org/manual/javacprops.html#target

回答 4 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.