Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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 执行jar命令排除文件_Java_Jar - Fatal编程技术网

Java 执行jar命令排除文件

Java 执行jar命令排除文件,java,jar,Java,Jar,我遵循了,但找不到如何排除文件夹 例如,我有工作副本目录下的文件: workingcopy --src --.svn -- com --.svn --WebContent 我只想从src下的类编译和创建jar,不包括以.svn目录开头的所有文件夹。我想从cmd运行它,比如jar-cf test.jar等等 我该怎么做呢?看起来jar程序本身无法做到这一点。您需要添加一些其他类型的脚本来完成所需的任务 看起来你可能正在使用windows,所以我猜你可以用这种方式来写这些缺失的部分 希望这

我遵循了,但找不到如何排除文件夹

例如,我有工作副本目录下的文件:

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


我该怎么做呢?

看起来jar程序本身无法做到这一点。您需要添加一些其他类型的脚本来完成所需的任务

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


希望这会有所帮助。

这很容易通过和等构建工具实现(以及许多其他事情)

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

进一步增强:将代码与类文件分开。无论如何,您都不想签入类文件(生成人工制品):


正如所说的,我不认为仅仅使用
jar
工具本身就可以做到这一点。您应该做的是考虑它的特性。

在SVN中有一个称为导出的概念。如果您使用它,您将获得不带.svn存储库的结构。这和退房有点不同


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

这可以通过以下命令完成:

jar cf test.jar `find . -not -path "*/.svn/*" -not -type d`
jar
的问题是,如果传递目录,它将与all内容一起递归添加。因此,我们的目标是只传递文件,并且只传递路径中没有“.svn”子字符串的文件。为此,
find
命令用于两种情况:

  • -not-path“*/.svn*”
    过滤掉所有svn文件
  • -not-type d
    过滤掉所有目录

  • 这将从jar中排除空目录。

    在Java 11中,您可以使用exlamation标记(!)来排除文件或文件夹,这些文件或文件夹由管道(|)分隔 示例:

    jar cvf MyJarFile.jar !(file1)
    
    
    jar cvf MyJarFile.jar !(file1|folder1)
    
    在Java8JAR上,使用@silnijlos中的find可以看到很好的答案

    您还可以使用maven、ant或gradle(如果有),maven参考:


    那里只有Java类。我还可以通过jar或任何其他不使用ANT的命令行将其编译为类吗?@Odelya-使用
    javac
    编译java源文件,并(可选)使用
    jar
    创建库
    jar
    无法编译,您不需要ant或maven,但尤其是ant极大地简化了构建过程(但您必须学习/理解ant基础知识)。maven更加简化,但maven更难理解。它需要(永久)的互联网连接。@Anderas_D是的,我和Maven一起工作过,但不喜欢它,因为eclipse的插件导致了大量额外的工作,而不是所有的东西都被编译过。在找到一个好的插件之前,我不想回到Maven和pom.xml。我知道如何使用ANT,但从FinalBuilder执行它很简单,没有build.xml的外部文件。这大大缩短了我的构建时间。谢谢你。多么优雅:)!用于跛脚jar工具的优秀unix解决方案:)。这对于旧版本非常好,至少在Java11中可以使用:jar-cvf-MyWarFile.war!(folder1)或jar cvf MyWarFile.war!(文件1 | folder1)用于多重排除。
    jar cf test.jar `find . -not -path "*/.svn/*" -not -type d`
    
    jar cvf MyJarFile.jar !(file1)
    
    
    jar cvf MyJarFile.jar !(file1|folder1)