摘要
我正在Eclipse Luna中开发一个Java应用程序。我一直在尝试开发一个Ant脚本,每当我重新编译源代码时,它都会增加项目的版本号。但是,当源文件更改时,我的脚本不会被调用。
详情
作为this problem I was having yesterday的后续内容,我尝试通过在Specify working set of relevant resources
下启用Properties -> Builders -> {Ant builder} -> Edit -> Build Options
并将工作集设置为包含我的所有源文件来解决此问题。 Eclipse的文档说,如果修改了任何这些文件,这将导致调用Ant脚本。完成此操作后,我从Auto Build
下的Targets
删除了所有目标来电。
在60秒内,这似乎有效;每当我对源文件进行更改并点击保存时,我的Ant脚本都会被调用并增加版本号,并且它不会像我在Auto Build
中调用它时那样引起反馈循环。
然后我尝试取消选中Allocate Console
下的Build Options
,看看我是否可以让脚本无声运行。这阻止了它的工作,所以我重新启用它。但是,这样做之后仍然没有用,甚至关闭和重新打开Eclipse也没有解决这个问题。
这是非常烦人和不直观的行为。这是一个错误还是我错过了什么?我希望Eclipse在修改源文件时调用我的Ant脚本,但不会导致它进入反馈循环,其中修改文件会导致重新编译,修改我的build_info.properties
文件,这会导致进一步重新编译,令人作呕。
如果需要,我很乐意提供任何其他信息。
修改
我尝试使用构建脚本的副本创建一个新的测试项目,并将其配置为运行该脚本。它在新项目中也不起作用。
我的测试项目结构:
我的构建配置:
我的蚂蚁脚本的相关资源的工作集:
我的完整构建脚本:
<?xml version="1.0" encoding="UTF-8"?>
<project name="buildscript" default="compileView">
<available file=".git" type="dir" property="git.present" />
<property name="propertyfile.name" value="ant/build_info.properties" />
<property file="${propertyfile.name}" />
<property name="build.number" value="v${build.major.number}.${build.minor.number}.${build.build.number}.r${build.revision.number}" />
<target name="current-number">
<echo>Current build number: ${build.number}</echo>
</target>
<!-- Set this as default -->
<target name="compileView">
<antcall target="compile">
</antcall>
<antcall target="current-number">
</antcall>
</target>
<target name="compile" depends="updateRevision">
<echo>Compiling...</echo>
<antcall target="build">
</antcall>
</target>
<target name="dist" depends="updateRevision">
<echo>Producing redistributable</echo>
<antcall target="minor">
</antcall>
<antcall target="createJar">
</antcall>
</target>
<target name="createJar" depends="updateRevision">
<property name="projectHome" location="." />
<jar destfile="<<redacted>>.jar" filesetmanifest="mergewithoutmain">
<manifest>
<attribute name="Main-Class" value="<<redacted>>.Main" />
<attribute name="Class-Path" value="." />
</manifest>
<fileset dir="${projectHome}/bin" />
<zipfileset excludes="META-INF/*.SF" src="${projectHome}/forms-1.3.0.jar" />
<zipfileset excludes="META-INF/*.SF" src="${projectHome}/miglayout15-swing.jar" />
<zipfileset excludes="META-INF/*.SF" src="C:/Users/<<redacted>>/Documents/eclipse/plugins/org.junit_4.11.0.v201303080030/junit.jar" />
<zipfileset excludes="META-INF/*.SF" src="C:/Users/<<redacted>>/Documents/eclipse/plugins/org.hamcrest.core_1.3.0.v201303031735.jar" />
</jar>
</target>
<target name="updateRevision" if="git.present">
<exec executable="git" outputproperty="git.hash" failifexecutionfails="true" errorproperty="">
<arg value="rev-parse" />
<arg value="HEAD" />
</exec>
<propertyfile file="${propertyfile.name}">
<entry key="build.revision.number" type="string" operation="=" value="${git.hash}" />
</propertyfile>
</target>
<target name="build" depends="updateRevision">
<propertyfile file="${propertyfile.name}">
<entry key="build.build.number" type="int" operation="+" value="1" />
</propertyfile>
</target>
<target name="minor" depends="updateRevision">
<propertyfile file="${propertyfile.name}">
<entry key="build.minor.number" type="int" operation="+" value="1" />
<entry key="build.build.number" type="int" value="0" />
</propertyfile>
</target>
<target name="major" depends="updateRevision">
<propertyfile file="${propertyfile.name}">
<entry key="build.major.number" type="int" operation="+" value="1" />
<entry key="build.minor.number" type="int" value="0" />
<entry key="build.revision.number" type="int" value="0" />
</propertyfile>
</target>
</project>
如果我手动调用脚本,脚本运行正常:
Buildfile: W:\<<redacted>>\workspace\TestProject\build.xml
compileView:
updateRevision:
compile:
[echo] Compiling...
updateRevision:
build:
[propertyfile] Updating property file: W:\<<redacted>>\workspace\TestProject\ant\build_info.properties
current-number:
[echo] Current build number: v0.0.2.r0
BUILD SUCCESSFUL
Total time: 143 milliseconds