【问题标题】:Execute jar command exclude files执行jar命令排除文件
【发布时间】:2020-10-23 08:16:16
【问题描述】:

我关注了The Java Archive Tool,但找不到如何排除文件夹。

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

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

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

我该怎么做?

【问题讨论】:

    标签: java jar


    【解决方案1】:

    这可以通过一个命令来完成:

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

    jar 的问题在于,如果传递了目录,它将递归地添加 all 内容。所以我们的目标是只传递文件,并且只传递那些在路径中没有'.svn'子字符串的文件。为此,find 命令与 2 个条件一起使用:

    1. -not -path "*/.svn*"过滤掉所有svn文件
    2. -not -type d 过滤掉所有目录

    不过,这将从 jar 中排除空目录。

    【讨论】:

    • 这大大减少了我的构建时间。谢谢。
    • 多么优雅:)! cripple jar 工具的绝佳 unix 解决方案:)。这对旧版本非常有用,至少在 Java 11 中可以使用:jar cvf MyWarFile.war !(folder1) 或 jar cvf MyWarFile.war !(file1|folder1) 进行多个排除。
    【解决方案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
    

    【讨论】:

    • 那里只有 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 的外部文件
    【解决方案3】:

    SVN中有一个概念叫做Export。如果您使用它,您将获得没有 .svn 存储库的结构。它与退房略有不同。

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        正如javamonkey79 所说,我认为您不能仅使用jar 工具本身来做到这一点。你应该做的是考虑ant,以及它的jar task

        【讨论】:

          【解决方案6】:

          从 Java 11 开始,您可以使用感叹号 (!) 排除文件或文件夹,用竖线 (|) 分隔 例子:

          jar cvf MyJarFile.jar !(file1)
          
          
          jar cvf MyJarFile.jar !(file1|folder1)
          

          在 Java 8 jar 上,使用 find from @silnijlos 查看最佳答案

          如果有可用的 maven、ant 或 gradle,您也可以使用,参考 maven:

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

          【讨论】:

            【解决方案7】:

            看起来 jar 程序本身无法做到这一点。您将需要添加一些其他类型的脚本来完成您正在寻找的内容。

            看起来你可能正在使用 Windows,所以我猜你可以这样写这些缺失的部分。

            希望这会有所帮助。

            【讨论】:

              猜你喜欢
              • 2012-01-01
              • 2014-09-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-06-13
              • 1970-01-01
              • 2015-10-13
              • 2011-08-25
              相关资源
              最近更新 更多