执行jar命令排除文件

时间:2011-01-04 07:50:45

标签: java jar

我关注The Java Archive Tool但无法找到如何排除文件夹。

例如,我将文件放在工作副本目录下:

workingcopy
--src
  --.svn
  -- com
--.svn
--WebContent

我想从src下的类中编译和创建jar,不包括以.svn目录开头的所有文件夹。我想从cmdjar -cf test.jar等运行它。

我该怎么做?

7 个答案:

答案 0 :(得分:21)

这可以通过命令完成:

jar cf test.jar `find . -not -path "*/.svn/*" -not -type d`

jar的问题在于,如果传递了目录,则会使用所有内容递归添加。所以我们的目标是只传递文件,只传递路径中没有“.svn”子字符串的文件。为此,find命令用于2个条件:

  1. -not -path "*/.svn*"过滤掉所有svn文件
  2. -not -type d过滤掉所有目录
  3. 这会从jar中排除空目录。

答案 1 :(得分:2)

对于您的问题,这可能是一个实用的解决方法:它不会排除 subversion目录(目录),但只包含类文件(假设您放置版本控制下的类文件):

jar -cf test.jar *.class

进一步增强:将代码与类文件分开。您无论如何都不想签入类文件(构建工件):

workingcopy
--src
  --.svn
  -- com  // only *.java files in here and below
--.svn
--WebContent
--bin
  --com   // only *.class files in here and below

答案 2 :(得分:1)

通过mavenant以及gradle

等构建工具可轻松实现(以及许多其他功能)

答案 3 :(得分:1)

在SVN中有一个名为Export的概念。如果您使用它,您将获得没有.svn存储库的结构。与Check-Out略有不同。

在此之后,您必须能够从该目录而不是存储库文件夹执行常规jar命令。

答案 4 :(得分:0)

它看起来不像jar程序本身就可以做到这一点。您需要添加一些其他类型的脚本来完成您要查找的内容。

看起来你可能正在使用Windows,所以我的猜测是你可以用这种方式写下这些缺失的部分。

希望这有帮助。

答案 5 :(得分:0)

正如javamonkey79所述,我不认为你可以使用jar工具本身做到这一点。你应该做的是考虑ant及其jar task

答案 6 :(得分:0)

在Java 11中,您可以使用感叹号(!)排除由管道(|)分隔的文件或文件夹 例子:

mNsdManager.stopServiceDiscovery(mDiscoveryListener)
    
multicastLock.release()

在Java 8 jar上,使用@silnijlos中的find命令查看最佳答案

如果可用,也可以使用maven,ant或gradle,作为maven的参考:

http://maven.apache.org/plugins/maven-war-plugin/examples/including-excluding-files-from-war.html