Ant构建生成0字节的jar文件

时间:2012-04-02 19:53:08

标签: netbeans ant build jar

几个月来我一直有一个间歇性的问题,在我的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文件的来龙去脉,所以我不清楚为什么它们如此复杂。我编写了一个有点最小的备用build.xml文件,用于在Solaris服务器上的Hudson环境中构建软件。那个版本从来没有这个问题。

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

关于我应该在哪里调试这个的任何指针都将非常感激。

5 个答案:

答案 0 :(得分: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服务器。做重复清洁&amp;构建有时会解决问题,有时候不会,但我发现删除0字节的jar然后每次都进行构建(或部署)。问题是,如果已经存在文件netbeans根本不复制库,它不会检查文件大小,所以删除它会强制netbeans做一个新的副本。

再见

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

不幸的是,我无能为力,除非修改构建脚本以在复制jar文件之前抛出延迟。现在我的解决方法是在完全清理和构建之后手动复制jar,然后运行Build(而不是Clean和Build),只需要几秒钟来重新打包ear文件。

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

答案 3 :(得分:0)

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

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

  1. 当我将jar或库添加到项目中然后将其删除时
  2. 当我清理并构建EAR文件时
  3. 我已经多次遇到过这个问题,现在它甚至都不好笑。我不知道我是否有与你完全相同的问题,但这就解决了我的问题。

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

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

    1. 我清理了所有依赖项目和EAR文件本身并确保所有/ dist文件夹都已消失。
    2. 我在我的EAR文件中选择了“清理并构建”。
    3. 我在我的/ dist文件夹中打开了EAR文件,发现我的/ lib文件夹中至少有一个JAR文件是“空”或大小为零。
    4. 仅清理和构建大小为零的项目。然后在EAR文件中选择“Build”和 not “Clean and Build”。我希望这会有所帮助。

      我只能理解EJB正在构建两次,因为它是我的WAR文件中的依赖项,并且在第二次构建期间它被复制到/ lib文件夹中。我没有做任何蚂蚁调试,只发现这是我的问题的解决方案。

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

      祝你好运!

答案 4 :(得分:0)

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

就我而言(Nebeans 8.0.2),取消选中我的企业应用程序的“编译保存”复选框就足够了。 (项目属性 - &gt;编译 - &gt;保存时编译)