2012-04-02 40 views
1

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

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是0字节的Myproj-common.jar文件。主构建目录中的一个总是正确的大小。目前还不清楚为什么我在最终结果中有两个jar文件副本。所有的ant构建脚本都是由NetBeans自动生成的。

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

从NetBeans 7.0.1升级到7.1.1后,问题变得更加频繁,并且无论我是在NetBeans内部还是在命令行上构建项目,都会发生此问题。我遇到这个问题的系统运行Windows XP。对于NB 7.0.1,我的构建可能是六次中的一次。现在我有一个好的建立,也许是十次中的一次。

任何指针,我应该在哪里寻找调试这将是最受赞赏。

回答

0

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

不幸的是,我可以做的事情不多,除非修改构建脚本以便在复制jar文件之前引发延迟。现在我的解决方法是在完整的Clean和Build后手动复制jar,然后运行Build(而不是Clean和Build),只需几秒钟就可以重新打包ear文件。

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

0

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

+0

感谢。我会尝试这些选项,看看我能找到什么。如果我取得进展或解决问题,我会报告回来。 – 2012-04-09 18:57:21

+0

我已经能够获得发生问题的构建的ant调试输出。但是,通过丰富的输出和主要关注myProj-common.jar事件,我没有看到任何错误或迹象表明构建过程中出现了问题。你有任何关于寻找常见蚂蚁问题的建议,这可能不明显? – 2012-04-12 15:34:14

0

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

我看到这种情况发生时,我做了两件事情之一。

  1. 当我添加一个罐子或库的项目,然后将其删除
  2. 当我做一个干净的,并建立在

我也遇到过这个问题很多次EAR文件,它是现在甚至不好笑。我不知道我是否和你有完全相同的问题,但是这是解决我的问题的方法。

删除任何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文件夹中。我没有做任何蚂蚁调试,只发现这是我的问题的解决方案。

摘要:彻底治理及妥善建造,并确保你是“清理并生成” -ing该结束了在你的lib文件夹大小为0的项目,然后打只在您的EAR文件“生成”。

祝你好运!

1

我知道这是一个古老的问题,但分享经验可能会帮助别人。

我已经与NetBeans 8.0.2 Linux上的同样的问题,我的企业项目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服务器。这样做repeately干净&构建有时解决问题,有时候没有,但我发现,删除0字节罐子,然后做一个版本(或部署)屡试不爽。问题是,如果有一个文件已经存在,netbeans根本不复制库,它不检查文件大小,所以删除它会迫使netbeans做一个新的拷贝。

再见

+0

“我发现删除了0字节的jar然后做了一个构建......”这对我很有用,谢谢。 – DavidS 2016-04-19 18:08:06