我最近工作中开始使用maven2作为build构建工具。开始很不适应,但是随着了解的深入,我逐渐感受到maven功能强大。今天还解决了一个在Netbeans maven工程中wsimport的类无法"source insight"的问题。
环境:
Netbeans 6.5
Maven 2.0.9
Netbeans安装了Maven相关的插件后可以比较完美地和maven集成。我们在使用中发现一个小的问题:我们的maven工程作为其他web service的client在执行wsimport之后生成了相关的类,编译没有问题。但是我们源代码中引用到相关类的地方Netbeans都会红线标出,表明无法找到相关的符号,而执行build实际上是可以编译的。而且我们无法做到敲个“.”就显示出web service中的所有方法。
问题出在Netbeans没有找到这些通过wsimport生成的class文件。在我们公司的另外一个maven工程中,同样的问题就没有出现,很奇怪。
我通过比较两个工程的pom.xml文件,发现它们存在一些区别。我们的pom.xml文件相关内容如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>1.9</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> <configuration> <keep>true</keep> <wsdlUrls> <wsdlUrl>...</wsdlUrl> </wsdlUrls> </configuration> </execution> </executions> </plugin>
而另外一个工程的pom.xml如下:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>1.11</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> <configuration> <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir> <resourceDestDir>${project.build.directory}/generated-sources/wsimport</resourceDestDir> <keep>true</keep> <wsdlUrls> <wsdlUrl>...</wsdlUrl> </wsdlUrls> </configuration> </plugin>
两个文件的区别主要有3点:
1. “jaxws-maven-plugin”的版本;
2. "<configuration>"设置的位置;
3. 是否指定"<sourceDestDir>"和"<resourceDestDir>"设置。
通过逐一排除,发现最终的问题出在:
<sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir> <resourceDestDir>${project.build.directory}/generated-sources/wsimport</resourceDestDir>
只要指定这两个路径Netbeans就可以找到生成的class文件,否则使用默认的路径就不行。
问题解决了,不过不清楚Netbeans到底是通过什么算法到哪些路径查找wsimport生成的class文件,有知道的高手请不吝赐教,呵呵!