在Eclipse中修改源文件时,不再调用Ant脚本

时间:2014-10-30 10:37:00

标签: java eclipse ant

摘要
我正在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

0 个答案:

没有答案