maven - 如何将 WSDL、XSD(以及可能的其他文件)添加到 WAR

标签 maven war maven-plugin pom.xml

我有一个非常简单的 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/

相关文章:

eclipse - GWT + Maven + 执行错误(org.bsc.maven :maven-processor-plugin:2. 0.5:process:process:generate-sources)

maven - 如何强制 NetBeans 加载 Gradle 项目而不是 Maven pom?

java - 在 eclipse 插件中使用 ANTLR v4 运行时

java - 使用 jaxws-maven-plugin 控制 JAX-WS wsdlLocation 属性值(绝对路径)

web-applications - 如何使用 Maven 和 ProGuard 混淆 webapp

java - 将 application.properties 与 tomcat 容器的 .war 分开

java - 容器在 jenkins 中启动失败

java - 获取maven插件中的pom参数

java - 如何获得 Maven 报告插件以使用 doxia API 生成报告?

java - 避免 maven-jar 的最佳方法是什么?