Gangmax Blog

解决Netbeans maven工程中wsimport的类无法"source insight"的问题

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文件相关内容如下:

1
2
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如下:

1
2
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文件,有知道的高手请不吝赐教,呵呵!

Comments