【问题标题】:Ant build producing 0-byte jar fileAnt 构建生成 0 字节的 jar 文件
【发布时间】:2012-04-16 11:54:29
【问题描述】:

几个月来,我一直遇到一个间歇性问题,在我的 ant 构建期间,它生成的 jar 文件之一的大小为 0 字节。这个0字节的jar文件最终被打包到我的ear文件中,后续部署失败。我的项目结构如下:

myProj
    myProj-common
    myProj-ejb
    myProj-web

生成的构建目录包含这些文件

lib
    myProj-common.jar  <-- sometimes 0 bytes
META-INF
   application.xml
   MANIFEST.MF
myProj-common.jar <-- never 0 bytes
myProj-ejb.jar
myProj-web.war

lib 中的 myProj-common.jar 文件为 0 字节。主构建目录中的那个总是正确的大小。我不清楚为什么最终结果中有两个 jar 文件副本。所有的 ant 构建脚本都是由 NetBeans 自动生成的。

我仍在学习 ant 构建文件的来龙去脉,所以我并不完全清楚为什么它们如此复杂。我编写了一个最小的替代 build.xml 文件,用于在 Solaris 服务器上的 Hudson 环境中构建软件。那个版本从来没有这个问题。

从 NetBeans 7.0.1 升级到 7.1.1 后,问题变得更加频繁,无论我是在 NetBeans 内部还是在命令行上构建项目,都会出现此问题。我遇到此问题的系统运行 Windows XP。使用 NB 7.0.1,我的构建可能有六分之一的糟糕。现在我有一个-good- build 可能有十分之一。

任何关于我应该在哪里调试的指针将不胜感激。

【问题讨论】:

    标签: netbeans ant build jar


    【解决方案1】:

    我知道这是一个老问题,但分享 mi 经验可能会对某人有所帮助。

    我在 linux 上使用 netbeans 8.0.2 时遇到了同样的问题,我的企业项目 lib 文件夹如下所示:

    ~/NetBeansProjects/myeeproject/build/lib $ ls -l
    -rw-rw-r-- 1 user1 user1   16013 jan  5 11:52 my_lib.jar
    -rw-rw-r-- 1 user1 user1 1489258 jan  5 11:52 my_ws_lib.jar
    -rw-rw-r-- 1 user1 user1       0 jan  5 11:52 commons-lang3-3.1.jar
    -rw-rw-r-- 1 user1 user1       0 jan  5 11:52 itextpdf-5.4.5.jar
    -rw-rw-r-- 1 user1 user1       0 jan  5 11:52 primefaces-4.0.jar
    -rw-rw-r-- 1 user1 user1       0 jan  5 11:52 primefaces-extensions-1.1.0.jar
    

    我无法将项目部署到 glassfish 服务器。重复清理和构建有时可以解决问题,有时不能,但我发现删除 0 字节 jar 然后进行构建(或部署)每次都有效。问题是如果已经有一个文件,netbeans 根本不会复制库,它不会检查文件大小,因此删除它会强制 netbeans 进行新的复制。

    再见

    【讨论】:

    • “我发现删除 0 字节的 jar 然后进行构建...”这对我有用,谢谢。
    【解决方案2】:

    您应该能够通过使用 -d(调试)和 -v(详细)标志执行 Ant 来弄清楚发生了什么。您可以在 NetBeans 中添加这些标志,或者从命令行执行 NetBeans 生成的构建文件。

    【讨论】:

    • 谢谢。我会尝试这些选项,看看我能找到什么。如果我取得任何进展或得到解决,我会报告。
    • 我已经能够获得发生问题的构建的 ant 调试输出。但是,通过查看大量输出并主要关注 myProj-common.jar 事件,我没有看到任何错误或构建过程中出现问题的迹象。您对常见的 ant 问题有什么建议吗?可能不是很明显?
    【解决方案3】:

    这似乎与我们的全盘加密软件 PGP Desktop 有冲突。最近它在我的笔记本电脑上以降级模式运行,这大大减慢了我的构建速度,但后来我从未发现问题出现。我的猜测是,这为较低级别的驱动程序留下了时间来完成他们正在采取的任何行动并刷新他们的写缓冲区。现在看起来 jar 文件在写入缓冲区刷新之前被复制,因此一个 0 字节的文件被复制。 Ant 永远不会看到错误,这就是构建过程中没有失败的原因。

    不幸的是,我无能为力,除了修改构建脚本以在 jar 文件被复制之前造成延迟。现在我的解决方法是在完整的 Clean and Build 之后手动复制 jar,然后运行 ​​Build(而不是 Clean and Build),它只需要几秒钟就可以重新打包 ear 文件。

    我认为当我升级 NetBeans 时问题变得更加普遍的原因是 IDE 中的一些更改使构建运行得更快,因此我更经常遇到缓冲问题。

    【讨论】:

      【解决方案4】:

      我最近也遇到了类似的问题。总结一下,我有一个 EAR 文件,其中包含一些 EJB 文件和一个 WAR 文件。我在带有 Netbeans 7.2 的 Windows 7 64 位环境中,我在本地 JBoss 7 服务器上运行。

      当我做两件事中的一件时,我已经看到了这种情况。

      1. 当我将 jar 或库添加到项目中然后将其删除时
      2. 当我在 EAR 文件上进行清理和构建时

      这个问题我遇到过很多次了,现在都不好笑了。我不知道我是否和你有完全相同的问题,但这就是解决我的问题的方法。

      删除任何 jar 或库后,您必须清理并构建。当我删除任何 JAR 文件或库时,我看到空 jars 最终出现在我的 EAR 的 lib 文件夹中。清理这将有助于减少您的问题。

      这是发生在我身上的主要事情。

      1. 我清理了所有依赖项项目和 EAR 文件本身,并确保所有 /dist 文件夹都消失了。
      2. 我在我的 EAR 文件中选择了“清理并构建”。
      3. 我打开 /dist 文件夹中的 EAR 文件,发现 /lib 文件夹中始终至少有一个“空”或大小为零的 JAR 文件。

      只清理和构建大小为零的项目。然后在您的 EAR 文件中选择“Build”和not“Clean and Build”。我希望这会有所帮助。

      我只能推测 EJB 被构建了两次,因为它是我的 WAR 文件中的一个依赖项,并且在第二次构建期间它被复制到 /lib 文件夹中。我没有做过任何ant调试,只是发现这是解决我的问题的方法。

      总结:正确清理和构建,并确保您正在“清理和构建” - 在您的 lib 文件夹中最终大小为 0 的项目,然后仅在您的 EAR 文件上点击“构建”.

      祝你好运!

      【讨论】:

        【解决方案5】:

        我在这里找到了解决这个问题的方法:https://netbeans.org/bugzilla/show_bug.cgi?id=216033

        在我的情况下(Nebeans 8.0.2),取消选中我的企业应用程序的“保存时编译”复选框就足够了。 (项目属性 -> 编译 -> 保存时编译)

        【讨论】:

          猜你喜欢
          • 2013-07-15
          • 2010-11-30
          • 1970-01-01
          • 2011-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-12
          • 2020-04-08
          相关资源
          最近更新 更多