Ant构建生成0字节的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自动生成的。

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

从NetBeans 7.0.1升级到7.1.1后,这个问题变得更加频繁,无论我是在NetBeans内部还是在命令行上构建项目,都会出现这个问题。我遇到这个问题的系统运行的是Windows XP。对于NB 7.0.1,我可能六次中就有一次构建不好。现在我的身材很好,可能十分之一。

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

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

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

~/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进行新的复制。

bye

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

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

不幸的是,除了修改构建脚本以在复制jar文件之前添加延迟之外,我无能为力。现在,我的解决方法是在完全清理和构建之后手动复制jar,然后运行构建(与清理和构建相反),这只需要几秒钟就可以重新打包ear文件。

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

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

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

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

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

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

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

  1. 我清理了所有依赖项项目和EAR文件本身,并确保所有/dist文件夹都不见了
  2. 我在我的EAR文件中选择了"Clean and Build"
  3. 我打开/dist文件夹中的EAR文件,发现在/lib文件夹中总会有至少一个JAR文件为"空"或大小为零

仅清理并生成大小为零的项目。然后在EAR文件上选择"Build"(构建),而不是"Clean and Build"(清理并构建)。我希望这能有所帮助。

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

摘要:正确地清理和构建,并确保您正在"清理和构建"lib文件夹中最终大小为0的项目,然后只在EAR文件上点击"构建"。

祝你好运!

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

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

相关内容

  • 没有找到相关文章

最新更新