My 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);
}
我需要使用IdentString创建一个Zip文件(仅1.7.77部分)。我不能更改Version.java或添加新的属性文件。所以我需要这个Ident值,并使用ant创建一个类似zip的applicationn_.zip。
请帮助
我宁愿做相反的事情。
将版本号作为属性放入生成文件中。在构建时,使用replace-ant任务将ant的版本插入version.java文件,然后编译应用程序。
这样,您仍然只有一个地方可以编写版本,并且随应用程序提供的version类与您现在拥有的版本类相同。
正如其他答案所建议的,我的第一个偏好是从ANT属性控制内部版本号。
按要求提供解决方案
您已经在其他答案中指出,您需要从version.java文件中解析出版本号。
我的解决方案使用groovy ant任务来设置版本属性:
<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>
我个人使用version.properties
文件,其中包含以下内容:
version = 1.7.77
Ant构建文件build.xml
有以下语句用于包含和使用version.properties
中定义的值:
<property file="version.properties"/>
可以使用version
属性来创建zip文件:
<zip destfile="build/${version}.zip" basedir="dir_to_pack" />