3

私は Maven を学んでおり、それがどのように機能するかを理解する助けが必要です。

私はアプリケーションを持っています。以前のビルドは ANT を使用して作成されていました。今、私はそれをMavenに移行しています。.ear ファイルを作成したい。アプリケーションは WSDL ファーストの Web サービスです。そのため、cxf-codegen-pluginMaven プラグインを使用しています。コードが正常に生成されました。生成されたソースの .jar ファイルを作成する方法を除いて、その部分はすべて問題ありません。

1 つの Mavenpom.xmlファイルだけでアプリケーションを構築することは可能ですか? または、生成されたソースの .jar ファイルを構築するため、.war ファイルを構築するため、およびpom.xml最終的に .ear ファイルを構築するために他のファイルを構築するために、個別の Maven ファイルが必要ですか?

私のmavenファイルは次のようになります:

<?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.groupgti.ws.bizzbuzz</groupId>
    <artifactId>BizzBuzzWSEAR</artifactId>
    <version>1.0</version>

    <packaging>ear</packaging>

    <name>BizzBuzzWSEAR</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!-- All needed dependencies -->
    </dependencies>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <includes>
                        <include>src/main/**</include>
                    </includes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <version>6</version>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>2.5.2</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/webapp/WEB-INF/wsdl/BizzBuzz.wsdl</wsdl>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

このスクリプトを実行すると、.ear ファイルが作成されますが、.war ファイルは含まれていません。アーティファクトを作成する順序は、wsdl からコードを生成、コンパイルする、jar を作成する、war をビルドする、ear をビルドする必要があります。

その一連のターゲットを Maven で構築するにはどうすればよいですか?

4

2 に答える 2

2

いくつかの試行とテストの後、私はそれを自分で行うことができました。

BizzBu​​zzWSEARというプロジェクトを1つ作成してから、そのpom.xmlファイルを作成しました。次のようになります。

<?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.groupgti.ws.bizzbuzz</groupId>
    <artifactId>BizzBuzzWSEAR</artifactId>
    <version>1.0</version>
    <modules>
        <module>BizzBuzz-web</module>
        <module>BizzBuzz-ear</module>
        <module>BizzBuzz-cxf</module>
    </modules>
    <packaging>pom</packaging>
    <name>BizzBuzzWSEAR</name>
</project>

次に、他に3つのモジュールを作成しました。

BizzBu​​zz-web-Webアプリケーション(Webサービス)用BizzBu​​zz-ear-エンタープライズアプリケーション用BizzBu​​zz-cxf-wsdl2java.jarファイル用

BizzBu​​zz-webモジュールpom.xmlは次のようになります。

<?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">
    <parent>
        <artifactId>BizzBuzzWSEAR</artifactId>
        <groupId>com.groupgti.ws.bizzbuzz</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>BizzBuzz-web</artifactId>
    <groupId>com.groupgti.ws.bizzbuzz</groupId>
    <version>1.0</version>
    <packaging>war</packaging>

    <name>BizzBuzz-web</name>

    <properties>
        <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <compilerArguments>
                        <endorseddirs>${endorsed.dir}</endorseddirs>
                    </compilerArguments>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.1.1</version>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.1</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>copy</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${endorsed.dir}</outputDirectory>
                            <silent>true</silent>
                            <artifactItems>
                                <artifactItem>
                                    <groupId>javax</groupId>
                                    <artifactId>javaee-endorsed-api</artifactId>
                                    <version>6.0</version>
                                    <type>jar</type>
                                </artifactItem>
                            </artifactItems>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.groupgti.ws.bizzbuzz</groupId>
            <artifactId>BizzBuzz-cxf</artifactId>
            <version>1.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

</project>

BizzBu​​zz-earモジュールのpom.xmlファイルは次のようになります。

<?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">
    <parent>
        <artifactId>BizzBuzzWSEAR</artifactId>
        <groupId>com.groupgti.ws.bizzbuzz</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>BizzBuzz-ear</artifactId>
    <groupId>com.groupgti.ws.bizzbuzz</groupId>
    <version>1.0</version>
    <packaging>ear</packaging>

    <name>BizzBuzz-ear</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <netbeans.hint.deploy.server>gfv3ee6</netbeans.hint.deploy.server>
    </properties>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <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.maven.plugins</groupId>
                <artifactId>maven-ear-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <version>6</version>
                    <defaultLibBundleDir>lib</defaultLibBundleDir>
                </configuration>
            </plugin>

        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>com.groupgti.ws.bizzbuzz</groupId>
            <artifactId>BizzBuzz-web</artifactId>
            <version>1.0</version>
            <type>war</type>
        </dependency>
    </dependencies>

</project>

また、BizzBu​​zzの場合-cxfモジュールpom.xmlファイルは次のようになります。

<?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">
    <parent>
        <artifactId>BizzBuzzWSEAR</artifactId>
        <groupId>com.groupgti.ws.bizzbuzz</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>BizzBuzz-cxf</artifactId>
    <groupId>com.groupgti.ws.bizzbuzz</groupId>
    <version>1.0</version>
    <packaging>jar</packaging>

    <name>BizzBuzz-cxf</name>

    <build>
        <plugins>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <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.5.2</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${project.build.directory}/generated/cxf</sourceRoot>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${basedir}/src/main/resources/BizzBuzz.wsdl</wsdl>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>

</project>

次に、プロジェクトBizzBu​​zzWSEARpom.xmlファイルをビルドするときに、すべてとパッケージを.earファイルにビルドします。誰かのためにこの情報が役立つことを願っています。

于 2012-07-16T15:02:00.900 に答える
1

作成した pom に関するいくつかのヒント/提案/改善を次に示します。

まず、アプリが開発中であり、まだリリースされていないため、1.0 ではなくバージョン 1.0-SNAPSHOT を定義する必要があります。

この場合、使用する上でいくつかの利点があるマルチモジュール ビルドがあります。次のように、すべてのモジュールでバージョン番号とグループ ID を定義しています。

<parent>
    <artifactId>BizzBuzzWSEAR</artifactId>
    <groupId>com.groupgti.ws.bizzbuzz</groupId>
    <version>1.0</version>
</parent>
<artifactId>BizzBuzz-web</artifactId>
<groupId>com.groupgti.ws.bizzbuzz</groupId>
<version>1.0</version>
<packaging>war</packaging>

あなたのようなマルチモジュールビルドでは、これを次のように減らすことができます (ベストプラクティスのような):

<parent>
    <artifactId>BizzBuzzWSEAR</artifactId>
    <groupId>com.groupgti.ws.bizzbuzz</groupId>
    <version>1.0</version>
</parent>

<artifactId>BizzBuzz-web</artifactId>
<packaging>war</packaging>

groupId とバージョンは親によってモジュールに継承され、pom が小さくなります。

さらに、プロパティのようなグローバル構成を配置する必要があります。

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

親ポンに。それとは別に、次のように、親のプラグインのデフォルト バージョンなどを定義できます (親):

  <build>
    <pluginManagement>
      <plugins>
       <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <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.maven.plugins</groupId>
           <artifactId>maven-ear-plugin</artifactId>
           <version>2.6</version>
           <configuration>
              <version>6</version>
              <defaultLibBundleDir>lib</defaultLibBundleDir>
           </configuration>
       </plugin>
     ...

これにより、次の ear モジュール 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>

    <parent>
        <artifactId>BizzBuzzWSEAR</artifactId>
        <groupId>com.groupgti.ws.bizzbuzz</groupId>
        <version>1.0</version>
    </parent>

    <artifactId>BizzBuzz-ear</artifactId>
    <packaging>ear</packaging>

    <name>BizzBuzz-ear</name>

    <dependencies>
        <dependency>
            <groupId>${project.goupId}</groupId>
            <artifactId>BizzBuzz-web</artifactId>
            <version>${project.version}</version>
            <type>war</type>
        </dependency>
    </dependencies>

</project>
于 2012-07-17T08:54:04.583 に答える