Migarated from here at ‘2012-06-04 17:16:25’.
我最近工作中开始使用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文件相关内容如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 
 | <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如下:
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 
 | <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>"设置。
 
 通过逐一排除,发现最终的问题出在:
 
 ```xml
 <sourceDestDir>${project.build.directory}/generated-sources/wsimport</sourceDestDir>
 <resourceDestDir>${project.build.directory}/generated-sources/wsimport</resourceDestDir>
 
 | 
只要指定这两个路径Netbeans就可以找到生成的class文件,否则使用默认的路径就不行。
问题解决了,不过不清楚Netbeans到底是通过什么算法到哪些路径查找wsimport生成的class文件,有知道的高手请不吝赐教,呵呵!