如何将包含属性文件的目录添加到Ant build.xml中?

4

我正在尝试使用ant构建“uberjar”,该项目有一个配置目录,其中包含几个属性文件。

如何将config dir添加到build.xml中?

这是一个引用示例:

static private String CONFIG_DIR = "config/";
static public String CONFIG_FILE = "proj.properties";

File configFile = new File(CONFIG_DIR, CONFIG_FILE);

配置目录中有多个属性文件。通常我会将其添加到类路径中:

java -classpath bin:lib/*:config some.project.Example

这是我的build.xml目标,但它还不够正确:
<target name="uberjar" depends="compile">
  <jar jarfile="${babelnet.jar}">
    <fileset dir="${bin.dir}">
      <include name="**/*.class"/>
    </fileset>
    <zipgroupfileset dir="lib" includes="*.jar"/>
  </jar>
  <copy todir="config">
    <fileset dir="config">
      <include name="**/*.properties"/>
    </fileset>
      </copy>
</target>

你应该考虑从类路径中作为资源加载文件:https://dev59.com/gXA75IYBdhLWcg3wdIl0 - oers
1
如果可能的话,我更倾向于不修改代码——这是我正在评估的一个外部项目。 - espeed
@espeed:你是想将属性文件添加到jar包中的配置目录吗? - Christopher Peisert
是的,这样它就可以在jar包中被访问了。 - espeed
无法通过new File() ...访问jar文件内部任何内容,如果您不想更改代码,则需要将这些文件与您的jar分开。 - oers
1个回答

5
为了将属性文件包含在新的jar文件中,您可以在<jar>任务中添加另一个嵌套的<fileset>
<target name="uberjar" depends="compile">
  <jar jarfile="${babelnet.jar}">
    <fileset dir="${bin.dir}">
      <include name="**/*.class"/>
    </fileset>
    <zipgroupfileset dir="lib" includes="*.jar"/>
    <fileset dir="${basedir}">
      <include name="config/*.properties"/>
    </fileset>
  </jar>
</target>

此外,可查看stackoverflow问题:如何从jar文件中读取文件?

我尝试过了,但是 new File(CONFIG_DIR, CONFIG_FILE); 找不到文件。 - espeed
@espeed:请查看链接***如何从jar文件中读取文件?***。 - Christopher Peisert
谢谢。我正在尝试在不修改项目代码的情况下使其正常工作 - 这是一个外部项目。 - espeed
2
如果您必须使用Java File对象,则无法从jar文件中读取属性文件。 - Christopher Peisert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接