我正在使用Apache CXF 2.x,Eclipse Luna 64位,Maven 3.x
我有一个具有WSDL的Web服务生产者应用程序,我希望应用程序中的Stubs可以从WSDL动态生成。
我已经安装了Maven Lifecycle Dependency并安装了两个M2E WTP连接器。在Eclipse Project中 - >属性 - > Maven - >生命周期映射,我看到cxf-codegen-plugin:wsdl2java,它表明它已正确附加到generate-sources生命周期阶段。
当我手动运行mvn install
时,会自动生成存根,一切正常。
但是如果我清理maven项目并在eclipse中加载它,eclipse不会自动生成存根。我看到Eclipse在Eclipse工作区中缺少类错误,显示gen没有发生。
我错过了什么步骤?
这是我正在使用的POM。
<?xml version="1.0" encoding="UTF-8"?>
<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.test</groupId>
<artifactId>testWeb</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>testWeb</name>
<properties>
<cxf.version>2.1.3</cxf.version>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<spring.version>3.2.2.RELEASE</spring.version>
</properties>
<repositories>
<repository>
<id>snapshots</id>
<name>ILP Snapshot Repository</name>
<url>http://dhud001.test.com:8675/maven_snapshot/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
<repository>
<id>eclipse</id>
<name>Eclipse</name>
<url>https://repo.eclipse.org/content/repositories/releases/</url>
<releases>
<enabled>true</enabled>
<updatePolicy>daily</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
<layout>default</layout>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf</artifactId>
<version>${cxf.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>src/gen/java</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<useCompileClasspath>true</useCompileClasspath> <!-- if you don't use this, the soapui test bundle will cause classloading issues with this plugin. -->
<sourceRoot>${project.basedir}/src/gen/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${project.basedir}/src/main/webapp/wsdl/TestService.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/TestService.wsdl</wsdlLocation>
<extraargs>
<extraarg>-verbose</extraarg>
<extraarg>-all</extraarg>
</extraargs>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
我能够安装Build helper maven连接器,并且还尝试安装https://code.google.com/a/eclipselabs.org/p/m2e-cxf-codegen-connector/。但是消息来源仍未产生。
可以重现问题的eclipse项目示例如下:https://www.dropbox.com/s/vlo0ghbmkplu7au/service.zip?dl=0
答案 0 :(得分:2)
我不确定您在什么情况下的期望,但cxf m2e插件的生命周期映射似乎存在问题,因为清理机制不是清理适合于该目标文件夹的目标文件夹插件。
因此,只需手动删除目标文件夹(或至少删除&#34; cxf-codegen-plugin-markers&#34;子文件夹),然后运行构建。这应该在需要的地方生成java文件。
您还可以通过“运行”或“调试”上下文菜单项执行maven目标。 Maven确实删除了整个&#34;目标&#34;干净的文件夹。因此,从上下文运行菜单(或从maven运行配置)运行clean和install也可以满足您的需求。
请注意,命令行maven并不喜欢你的&#34; cxf&#34;依赖性,无论如何它似乎都不需要。我不得不删除它以使其工作。
最后一件事,在eclipse构建之后,cxf插件也没有刷新项目,这需要查看构建中生成的内容。因此,在构建之后需要在eclipse项目上快速使用F5。
答案 1 :(得分:2)
为了获取“更新Maven项目”以触发从Eclipse重建的cxf存根,您需要打开target
文件夹并删除target/*
。然后点击alt + f5 + enter
,您的存根将刷新。
由于某些原因,手动清理目标文件夹内容会触发maven的cxf构建以生成存根。更改WSDL /删除生成的源src文件夹的内容执行不帮助。