【问题标题】:How to add WSDL, XSD (and possibly other files) to WAR如何将 WSDL、XSD(以及可能的其他文件)添加到 WAR
【发布时间】:2013-10-15 12:41:57
【问题描述】:

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

它只在本地部署而不是在部署到远程服务器时有效的原因是远程服务器在开发源目录${basedir}/target/generated/src/main/ 中找不到.wsdl.xsd 文件,而且它们也无处可去在 WAR 文件中找到。

显然,我的 pom.xml 中遗漏了一些东西,这会使 Maven 将这些文件添加或附加到 WAR。

我尝试了attach-artifact 目标(如上所述),但它只将文件复制到我的本地(开发).m2 存储库,而不是 WAR 文件。

如何将文件添加或附加到要部署的实际 .war 文件?

【问题讨论】:

    标签: maven war maven-plugin pom.xml


    【解决方案1】:

    我解开了这个谜。

    在这里发布答案,以防另一个 Maven 新手(加上 CXF?)遇到这个问题:

    事实证明,attach-artifact 的执行是完全不需要的,并且是 in the wrong direction 的一个镜头。

    我所要做的就是在&lt;build&gt; 部分的顶部,在&lt;plugins&gt; 之前添加以下内容:

    <resources>
        <resource>
            <directory>src/main/wsdl</directory>
        </resource>
        <resource>
            <directory>src/main/xsd</directory>
        </resource>
    </resources>
    

    就是这样。然后,Maven 会自动将这些目录中的所有文件放在 WEB-INF/classes/ 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-21
      • 2021-10-06
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2017-06-06
      • 2012-03-25
      相关资源
      最近更新 更多