Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Ant:创建没有路径信息的tar?_Java_Ant_Jar_Tar - Fatal编程技术网

Java Ant:创建没有路径信息的tar?

Java Ant:创建没有路径信息的tar?,java,ant,jar,tar,Java,Ant,Jar,Tar,更新:我正在Windows XP上使用Ant 1.8.1 我正在尝试为多个项目编写Ant主构建文件。我可以为每个项目成功地创建一个jar,我想将所有这些jar打包到一个tar.gz文件中。每个jar文件都位于其各自项目的bin子目录中,但将来可能会更改此路径。我试过这样的方法: <tar destfile="foo.tar.gz" compression="gzip" > <tarfileset dir="."> <include name="**

更新:我正在Windows XP上使用Ant 1.8.1

我正在尝试为多个项目编写Ant主构建文件。我可以为每个项目成功地创建一个jar,我想将所有这些jar打包到一个tar.gz文件中。每个jar文件都位于其各自项目的bin子目录中,但将来可能会更改此路径。我试过这样的方法:

<tar destfile="foo.tar.gz" compression="gzip" >
   <tarfileset dir=".">
      <include name="**/*.jar" />
   </tarfileset>
</tar>
我需要:

foo.tar.gz
   project1.jar
   project2.jar

我试图使用Ant的复制任务将这些jar文件复制到一个临时目录,然后从那里对它们进行tar。但是,复制操作会复制目标目录中的路径。所以,同样的问题。

我想你差不多做到了,已经组装了一个扁平的文件目录。剩下的就是去掉
tarfileset
元素,该元素专门用于保存/插入结构。我认为
tar
zip
任务与嵌入的
fileset
元素配合得很好

文档证明了这一点-直到1.7
fileset
是可以用来代替
tarfileset
的嵌入式资源元素

仔细想想,我认为一旦切换到
文件集
,您可能就不再需要临时复制文件进行展平


编辑:

我刚刚构建并运行了这个构建文件:

<project name="tartest" default="teer">
   <target name="teer">
      <tar destfile="tartest.tar">
     <fileset dir="../Downloads" includes="*.ico *.gif"/>
      </tar>
   </target>
</project>
另外,
tar-xvf tartest.tar
将tarred文件转储到我当前的目录中

所以。。。你做了哪些不同的事情,导致了不同的结果


编辑2:

从重读你的问题中获得更多的洞察力。我完全避开了由
***
通配符生成的源路径问题


由于您已经在考虑将这些jar文件复制到一个临时目录,所以缺少的只是在
copy
任务中使用
flatten
属性。这应该能帮你解决问题。

你也许可以与他人合作完成这项任务。它允许您控制提供自己前缀(或不提供前缀)的整体结构


您可能想看看Ant的。

我尝试切换到文件集而不是tarfileset,但结果相同。对于迄今为止所有不相关的建议和评论,我深表歉意。我相信我的第二次更新现在有你需要的信息。谢谢!弗拉特成功了。我使用将所有jar文件复制到一个临时目录中,并从那里给它们涂上焦油。我必须使用通配符,如“*/.jar”,因为我有多个子项目(将来还要添加更多子项目)。我需要使其通用化,而不是手动将每一个都添加到构建文件中。我试图创建一个zip文件,它几乎与我上面提到的原始tar版本相同。结果是一样的。我尝试使用prefix属性,但它只是将文件的相对路径附加到我提供的前缀。例如,prefix=“test/out/”会在归档文件中创建路径为“test/out/project1/bin/project1.tar”等的文件。我也看到了这一点,但在某些地方,ant的文档过于神秘,无法帮助使用这些功能。我无法理解如何在
tar
任务中使用
flattmapper
,因此我选择了使用
copy
flattle
属性的简单解决方案。您知道关于ant任务的更多有用文档吗?我忘了,这是它应该如何工作的,但是出于某种原因ant不允许您在
tar
任务中使用映射器。最终,您必须按照事先所需的大致相同的布局构造文件。
<project name="tartest" default="teer">
   <target name="teer">
      <tar destfile="tartest.tar">
     <fileset dir="../Downloads" includes="*.ico *.gif"/>
      </tar>
   </target>
</project>
-rw-r--r-- 0/0            3487 2009-12-28 20:04 actor075_thumb.gif
-rw-r--r-- 0/0            1456 2010-06-16 10:57 bea-logo.gif
-rw-r--r-- 0/0           23800 2010-06-16 09:22 ejb1.gif
-rw-r--r-- 0/0            1406 2010-05-15 10:40 favicon-beta.ico
-rw-r--r-- 0/0            1406 2010-05-15 10:25 favicon-clown.ico
-rw-r--r-- 0/0            1406 2008-12-06 01:08 favicon.ico
<zip destfile="${dist}/product.zip">
    <zipfileset dir="bin/project1.jar" prefix="any/fake/path/you/want"/>
    <zipfileset dir="bin/project2.jar" prefix="any/fake/path/you/want"/>
    <zipfileset dir="some/other/path/project3.jar" prefix="any/fake/path/you/want"/>
</zip>
any/fake/path/you/want/project1.jar
any/fake/path/you/want/project2.jar
any/fake/path/you/want/project3.jar