【问题标题】:In Netbeans+Ant, how do I avoid wsimport rebuilding web service clients every build?在 Netbeans+Ant 中,如何避免 wsimport 每次构建时都重新构建 Web 服务客户端?
【发布时间】:2010-06-11 07:53:37
【问题描述】:

我正在进行一个使用 NetBeans (6.8) 的项目。我们使用了几个不同的 Web 服务,我们将它们添加为 Web 服务引用,并且 Netbeans 为我们自动生成 Ant wsimport 脚本。非常方便,但有一个缺点:每次调用 ant 时都会重新编译 Web 服务客户端。这大大减慢了构建过程,并导致sword-related injuries, maimings and deaths 的数量猛增。

通常,我会通过更改

中的 wsimport 元素来解决此问题
<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"
    destdir="${build.generated.dir}/jax-wsCache/PonyService"
    wsdl="${wsdl-PonyService}" 
    catalog="catalog.xml" 
    verbose="true"/>

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"
    destdir="${build.generated.dir}/jax-wsCache/PonyService"
    wsdl="${wsdl-PonyService}" 
    catalog="catalog.xml" 
    verbose="true">
    <produces dir="${build.generated.dir}/jax-wsCache/PonyService" />
</wsimport>

但我不能,因为这部分 Ant 脚本是自动生成的。如果我右键单击 PonyService Web 服务引用并选择 Edit Web Service Attributeswsimport options,我可以将属性添加到 wsimport 元素,但是不是子元素。

那么:除了破解自动生成的 Ant 脚本之外,我如何将 produces 子元素添加到 wsimport

或者更笼统地说:如何让 NetBeans 生成的wsimport每次构建时都重新编译 Web 服务客户端?

(也出现在NetBeans EE forum。)

【问题讨论】:

  • 在 NetBeans 7.1 中遇到同样的问题,但使用 wsimport 选项还不够熟练,无法理解依赖/生成节点工作的原因或如何更改它们。希望有人会偶然发现这一点,并提供有关如何阻止 WSDL 在每次重建时轮询的更多信息。
  • @TonyG,祝你好运。最好的解决方案可能是切换到 Maven 或其他不依赖 IDE 的构建系统(如 SBT)。

标签: java netbeans ant build wsimport


【解决方案1】:

我可能对这个发霉的问题有一个答案。自动代码生成旨在为项目提供 Web 服务客户端。代码是在一个单独的Web Service包文件夹下生成的,生成的包就在那个下面。一旦生成了该代码,就不再需要自动生成。代码是可以使用的。

备份一切之前做任何事情!

将生成的代码包从该文件夹拖放到您的主要源文件夹。 Web Service 包文件夹当然会消失,因为里面什么都没有。 Web 服务客户端定义仍然存在 - 这是我们通常会刷新定义的地方。删除那个。它不再需要了。现在进行干净重建。结果是您的项目中的代码包看起来就像您编写的其他所有代码一样 - 并且不会在每次构建时都查询远程 Web 服务。

是的,您已经失去了从 WSDL 动态重新生成代码的能力,但如果您确实需要这样做,只需重命名当前包,然后重新生成新代码并重复上述操作,并在您执行此操作时删除冗余代码'很舒服。您还可以从源树中删除 META-INF 节点。我发现它需要几个删除操作才能做到这一点。删除除 .java 代码模块之外的所有内容并进行重建后。我的代码可以毫无问题地进行远程连接。

当我意识到 Subversion 忽略了生成的代码时,我做了上述操作。生成的文件夹不包含 .svn 文件,因此我无法将该代码提交到我的存储库中。将代码集成到项目中的唯一方法是将其物理复制进去 - 然后我意识到另一个问题也得到了解决。

花了 2 年时间才找到解决方案,但我希望这对某人有所帮助...

【讨论】:

  • 如果我能给你这个答案的三分,我会的。尝试了很多类似的变体,但这是唯一能让课程正常工作的方法。
【解决方案2】:

您是否尝试过 NetBeans 6.9?我之所以问,是因为我的 jaxws-build.xml 看起来和你的不一样(都是由 NetBeans 自动生成的)。

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/ListProductsService" 
    destdir="${build.generated.dir}/jax-wsCache/ListProductsService"
    wsdl="${wsdl-ListProductsService}"
    catalog="catalog.xml"
    extension="true"
    verbose="true" 
    wsdlLocation="file:/C:/NetBeansProjects/wsclient/ListProductsService.wsdl" 
    xendorsed="true">
    <depends file="${wsdl-ListProductsService}"/>
    <produces dir="${build.generated.dir}/jax-wsCache/ListProductsService"/>
</wsimport>

上述wsclient项目可以在Web服务引用不在线的情况下进行清理和构建。

【讨论】:

  • 这些是在我出现之前制作的遗留项目,我认为是 NetBeans 6.7 或更早版本。我注意到有些项目实际上已经将它们的依赖/生成元素设置好了,而另一些则没有,所以似乎应该有一些方法可以让它们工作。烦人的是,无论 NB 版本如何,重新生成 jaxws-build.xml 都无济于事。哦,好吧,无论如何,我们很快就会迁移到 Maven,希望我们能比@user369572 有更多的运气......
猜你喜欢
  • 2017-10-28
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多