在Netbeans + Ant中,如何避免wsimport在每次构建时重建Web服务客户端?

时间:2010-06-11 07:53:38

标签: java netbeans ant build wsimport

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

通常,我会通过更改<{p>}中的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服务引用并选择编辑Web服务属性 wsimport选项,我可以向{{{}添加属性1}}元素,但不是子元素。

所以:除了黑客自动生成的Ant脚本之外,如何将wsimport子元素添加到produces

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

(同样刊登在NetBeans EE forum上。)

2 个答案:

答案 0 :(得分:3)

我可能会回答这个发霉的问题。自动代码生成旨在为Project提供Web服务客户端。代码在单独的Web Service包文件夹下生成,生成的包在其下。生成该代码后,不再需要自动生成。代码可供使用。

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

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

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

当我意识到Subversion忽略生成的代码时,我做了同样的事情。生成的文件夹不包含.svn文件,因此我无法将该代码提交到我的存储库中。将代码集成到项目中的唯一方法是将其物理复制 - 然后我意识到其他问题也已解决。

花了2年才得到解决方案,但我希望这有助于某人...

答案 1 :(得分:0)

您是否尝试过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服务引用联机的情况下进行清理和构建。