Ant Zip任务创建一个通过读取Version.java命名的zip

时间:2012-01-16 13:23:02

标签: java ant build

我的Version.java就像

public class Version {
 public Version() {
   VERSION_PROGRAMNAME = "application";
   VERSION_MAJOR = "1.7";
  }

public static final String IDENT = "@(#) application: 1.7.77 ";

public static void main(String[] args) {
  System.out.println(LINE_SEP);
  System.out.println("************* Version Information *************");
  System.out.println(new Version());
  System.out.println("***********************************************");
  System.out.println(LINE_SEP);
}

我需要使用Ident String创建一个Zip文件(仅1.7.77部分)。我无法更改Version.java或添加新的属性文件。所以我需要这个Ident值并使用ant创建一个像applicatipn_.zip这样的zip。

请帮助

3 个答案:

答案 0 :(得分:2)

我宁愿反过来。

将版本号作为属性放在构建文件中。在构建时,使用replace ant任务将ant中的版本插入到Version.java文件中,然后编译应用程序。

这样,您仍然只有一个地方可以编写版本,并且随应用程序提供的版本类与您现在拥有的版本相同。

答案 1 :(得分:1)

正如其他答案所示,我的首选是从ANT属性控制内部版本号。

按要求提供的解决方案

您已在其他答案中声明需要解析Version.java文件中的版本号。

我的解决方案使用groovy ant task设置版本属性:

<target name="parse-version">
    <taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>

    <groovy>
    def file = new File("src/main/java/Version.java")

    file.eachLine { line ->
        def matcher  = (line =~ /.*String IDENT = "@\(#\) application: ([\.\d]+) ";\s*/)

        if (matcher.matches()) {
            properties.version = matcher[0][1]
        }
    }
    </groovy>

    <fail message="Did not find version" unless="version"/>
</target>

<target name="build" depends="parse-version">
    <zip destfile="build/application_${version}.zip" basedir="dir_to_pack" />
</target>

答案 2 :(得分:0)

我个人使用version.properties文件,内容如下:

version = 1.7.77

Ant buildfile build.xml具有以下语句,用于包含和使用version.properties中定义的值:

<property file="version.properties"/>

可以使用version属性来创建zip文件:

<zip destfile="build/${version}.zip" basedir="dir_to_pack" />