2010-12-09 62 views
7

我敢肯定,这已经被问过或很简单。但无论出于何种原因,我似乎无法使其工作。我想用ant将${build.classpath}(包含冒号分隔的jar列表)复制到${output.dir}/myapp/WEB-INF/lib蚂蚁复制类路径罐子到一个目录

我现在有这个权利,它似乎不工作:

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

它把整个classpath中作为一个文件。我如何得到这个工作?

回答

12

Ant手册上的副本任务包含您的问题的答案。它提供的示例代码片段之一:

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

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

非常感谢,我肯定忽略了这个。这工作完美。它将`classpath`中的所有内容复制到目标目录。但`classpath`可能包含不是罐子的目录或文件,我该如何排除不是jar文件的东西? – 2010-12-09 23:02:02

0

我想你应该把所有的冒号分隔的jar文件放到一个根文件夹中。如果不可能,则创建一个单独的任务,将这些jar文件放到一个文件夹中(可能是临时的)。并将${build.classpath}分配给该文件夹。在复制条款中使用<fileset dir="${build.classpath}"/>

我希望它应该有所帮助。

1

我觉得像这样的somethink应该工作:

<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`的答案。 – 2010-12-09 23:01:06