Ant将类路径jar复制到目录中

7

我相信这个问题之前已经被问过或者很简单。但是出于某种原因,我似乎无法使其工作。我想使用ant将${build.classpath}(其中包含以冒号分隔的jar列表)复制到${output.dir}/myapp/WEB-INF/lib中。

我现在有以下代码,但它似乎不起作用:

<copy toDir="${output.dir}/myapp/WEB-INF/lib">
  <fileset file="${build.classpath}" />
</copy>

它将整个类路径视为一个文件。我该如何使其正常工作?
3个回答

14

在复制任务中,Ant手册包含了解决您的问题的答案。它提供了一个示例代码片段:

  

将当前CLASSPATH设置中的所有项目收集到目标目录中,同时扁平化目录结构。

<copy todir="dest" flatten="true">
  <path>
    <pathelement path="${java.class.path}"/>
  </path>
</copy>

1
非常感谢,我一定是不小心忽略了这个。这个方法完美地解决了我的问题。它将classpath中的所有内容复制到目标目录中。但是,classpath可能包含不是jar文件的目录或文件,我该如何排除任何不是jar文件的内容? - Mohamed Nuur
使用 <path refid="java.class.path"/> 代替路径。 - Andrew Gilmartin
1
答案中最重要的部分是 flatten="true" 选项。如果你不设置,我将不会执行任何操作。 - lucasvc

1

我认为这样做应该可以:

<copy todir="${output.dir}/myapp/WEB-INF/lib" verbose="yes" flatten="yes" failonerror="no">    
   <fileset dir="${build.classpath}">    
      <include name="*.jar" />    
   </fileset>    
</copy>

或者使用通配符进行包含:<include name="**/*.jar" />


1
抱歉,这根本不起作用。classpath 包含以冒号分隔的路径列表。到目前为止,唯一有效的方法是 user268396 的答案。 - Mohamed Nuur

0

我认为你应该把所有以冒号分隔的jar文件放到一个根目录中。如果不可能,那么创建一个单独的任务将这些jar文件放入一个文件夹中(可能是临时的)。并将${build.classpath}指定到该文件夹。在复制子句中使用<fileset dir="${build.classpath}"/>

我希望这可以帮到你。


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