带通配符的Ant - Pathelement仅适用于Javac分叉模式

foo*_*ger 3 java ant

我在使用Ant时遇到了以下问题.

我的ANT脚本片段:

<path id="id.compile.classpath">
  <pathelement location="src/compile_lib1/*" />
  <pathelement location="src/compile_lib2/*" />
</path>

<javac srcdir="${module.root}/${src.root}" destdir="${swap.target.classes}"
  nowarn="${javac.nowarn}" debug="${javac.debug}" fork="${javac.fork}"
  classpathref="id.compile.classpath" includeAntRuntime="${javac.includeAntRuntime}">
  <include name="**/*.java"/>
</javac>
Run Code Online (Sandbox Code Playgroud)

在javac任务中设置fork ="true"时,通配符pathelement工作正常,但是当forked设置为false时,Ant似乎无法正确解释通配符.(由于类路径错误,编译失败).

任何建议
谢谢.

Ian*_*rts 8

不要使用通配符pathelement,而是使用a fileset并让Ant为您扩展通配符.

<path id="id.compile.classpath">
  <fileset dir="src/compile_lib1" includes="*.jar" />
  <fileset dir="src/compile_lib2" includes="*.jar" />
</path>
Run Code Online (Sandbox Code Playgroud)

  • @foolhunger [Oracle 关于类路径的文档](http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/classpath.html) 中有关通配符的部分表示“通配符的扩展是尽早完成的” ,在调用程序的 main 方法之前,而不是在类加载过程本身的后期” - 这表明在分叉模式下,JVM 启动器将扩展通配符并将路径的扩展版本传递给编译器类。在非分叉模式下,这种情况不会发生,编译器会看到它不知道如何处理的文字“*”。 (2认同)