【问题标题】:Building enterprise application using Maven使用 Maven 构建企业应用程序
【发布时间】:2012-07-16 12:33:05
【问题描述】:

我正在学习 Maven,我需要一些帮助来了解它的工作原理。

我有一个应用程序。以前的建筑是使用 ANT 制作的。现在我将它迁移到 Maven。我想制作一个 .ear 文件。应用程序是 WSDL 优先的 Web 服务,因为我正在使用 cxf-codegen-plugin Maven 插件。代码生成成功,该部分一切正常,除了如何制作生成源的 .jar 文件。

是否可以仅使用一个 Maven pom.xml 文件构建应用程序?或者我需要单独的 Maven 文件来构建生成源的 .jar 文件,构建 .war 文件和其他 pom.xml 文件以最终构建 .ear 文件?

我的 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 文件。创建工件的顺序应该是:generate-code-from-wsdl、compile-it、make-jar、build-war、build-ear。

如何使用 Maven 构建目标序列?

【问题讨论】:

    标签: java maven


    【解决方案1】:

    经过一些尝试和测试,我设法自己做到了。

    我创建了一个名为 BizzBu​​zzWSEAR 的项目,然后为它创建了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>
    

    然后我创建了另外三个模块:

    BizzBu​​zz-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​​zzWSEAR pom.xml 文件时,将所有内容和包构建到 .ear 文件。希望这些信息对某人有用。

    【讨论】:

    • 但忽略了我对版本等的提示。
    【解决方案2】:

    以下是关于您创建的 pom 的一些提示/建议/改进:

    首先,您应该定义版本 1.0-SNAPSHOT 而不是 1.0,因为您的应用正在开发中,尚未发布。

    在这种情况下,您有一个多模块构建,它在使用中具有一些优势。您在每个模块中定义版本号和组 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 和 version 将由 parent 继承到模块,这使得 pom 更小。

    此外,您应该放置全局配置,例如属性:

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

    进入父pom。除此之外,您还可以为父级中的插件定义默认版本等,如下所示(父级):

      <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>
         ...
    

    这将导致以下耳模块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>
    

    【讨论】:

      猜你喜欢
      • 2017-03-21
      • 1970-01-01
      • 2017-06-12
      • 2018-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多