Java 在Netbeans+Ant中,如何避免每次构建都重新构建web服务客户端?

Java 在Netbeans+Ant中,如何避免每次构建都重新构建web服务客户端?,java,netbeans,ant,build,wsimport,Java,Netbeans,Ant,Build,Wsimport,我正在进行一个使用NetBeans 6.8的项目。我们使用几个不同的web服务,这些服务是作为web服务引用添加的,Netbeans会自动为我们生成Ant wsimport脚本。非常方便,但有一个缺点:每次调用ant时都会重新编译web服务客户端。这大大降低了构建过程的速度,并导致构建的数量猛增 通常,我会通过将wsimport元素从 <wsimport sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"

我正在进行一个使用NetBeans 6.8的项目。我们使用几个不同的web服务,这些服务是作为web服务引用添加的,Netbeans会自动为我们生成Ant wsimport脚本。非常方便,但有一个缺点:每次调用ant时都会重新编译web服务客户端。这大大降低了构建过程的速度,并导致构建的数量猛增

通常,我会通过将wsimport元素从

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

但我不能,因为Ant脚本的这部分是自动生成的。如果我右键单击PonyService web服务引用并选择编辑web服务属性⇒ wsimport选项,我可以向wsimport元素添加属性,但不能向子元素添加属性

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

或者更一般地说:如何使NetBeans生成的wsimport不在每次构建时重新编译web服务客户端


也出现在上。

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

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

做任何事之前都要备份

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

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

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


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

这些都是在我出现之前制定的遗留项目,我认为是NetBeans 6.7或更早版本。我注意到,一些项目实际上设置了depends/products元素,而其他项目没有,因此似乎应该有一些方法让它们工作。恼人的是,不管NB版本如何,重新生成jaxws-build.xml都没有帮助。哦,不管怎样,我们很快就要迁移到Maven了,希望我们能比@user369572更走运……在NetBeans 7.1中也遇到了同样的问题,但对wsimport选项还不够熟练,无法理解依赖/产生节点为什么工作或如何更改它们。希望有人会无意中发现这一点,并提供更多关于如何阻止WSDL在每次重建时被轮询的信息。@TonyG,祝你好运。最好的解决方案可能是切换到Maven或其他一些不依赖IDE的构建系统,如SBT。如果我能为这个答案给你三分,我会的。尝试了许多类似的变化,但这是唯一的事情,保持类工作。
<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>