我有一个非常简单的 pom.xml,如果部署在本地 (Tomcat 7),它会生成一个完全可用的 Web 服务。这是它的 <build>
部分:
<build>
<finalName>${artifact.id}</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<id>generate-sources</id>
<configuration>
<sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/wsdl/mywebservice.wsdl</wsdl>
<extraargs>
<extraarg>-impl</extraarg>
<extraarg>-verbose</extraarg>
</extraargs>
<wsdlLocation>${basedir}/src/main/wsdl/mywebservice.wsdl</wsdlLocation>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${basedir}/target/generated/src/main/java</source>
</sources>
</configuration>
</execution>
<execution>
<id>attach-artifacts</id>
<phase>package</phase>
<goals>
<goal>attach-artifact</goal>
</goals>
<configuration>
<artifacts>
<artifact>
<file>${basedir}/src/main/wsdl/mywebservice.wsdl</file>
<type>wsdl</type>
</artifact>
<artifact>
<file>${basedir}/src/main/xsd/myschema.xsd</file>
<type>xsd</type>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
它仅在部署在本地而不部署到远程服务器时有效的原因是因为远程服务器无法找到 .wsdl
和 .xsd
开发源目录中的文件 ${basedir}/target/generated/src/main/
而且在 WAR 文件中也找不到它们。
显然,我在我的 pom.xml 中遗漏了一些东西,这些东西会让 Maven 添加或附加这些文件到 WAR。
我尝试了 attach-artifact目标(如上所述)但它只将文件复制到我的本地(开发).m2
存储库,而不是 WAR 文件。
如何将文件添加或附加到实际的 .war
要部署的文件?
最佳答案
我解开了这个谜。
在这里发布答案以防其他 Maven 新手(加上 CXF?)遇到这个问题:
事实证明,attach-artifact
执行是完全不需要的,是一个镜头in the wrong direction .
我所要做的就是在 <build>
的顶部添加部分,就在 <plugins>
之前以下内容:
<resources>
<resource>
<directory>src/main/wsdl</directory>
</resource>
<resource>
<directory>src/main/xsd</directory>
</resource>
</resources>
就是这样。然后 Maven 自动将所有文件放在 WEB-INF/classes/
中的这些目录中。 .
关于maven - 如何将 WSDL、XSD(以及可能的其他文件)添加到 WAR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19250296/