我关注The Java Archive Tool但无法找到如何排除文件夹。
例如,我将文件放在工作副本目录下:
workingcopy
--src
--.svn
-- com
--.svn
--WebContent
我想从src
下的类中编译和创建jar,不包括以.svn目录开头的所有文件夹。我想从cmd
等jar -cf test.jar
等运行它。
我该怎么做?
答案 0 :(得分:21)
这可以通过命令完成:
jar cf test.jar `find . -not -path "*/.svn/*" -not -type d`
jar
的问题在于,如果传递了目录,则会使用所有内容递归添加。所以我们的目标是只传递文件,只传递路径中没有“.svn”子字符串的文件。为此,find
命令用于2个条件:
-not -path "*/.svn*"
过滤掉所有svn文件-not -type d
过滤掉所有目录这会从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)
答案 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