拆分Maven项目的推荐解决方案?

时间:2009-09-10 21:10:58

标签: maven-2

在Maven中拆分大型企业项目的最佳方法是什么?

很容易理解如何像这样垂直地分割事物......

  1. 您有一个DAO项目
  2. DAO项目依赖于     服务项目
  3. 服务项目是一个依赖项     网络项目。
  4. 是否有人对Maven.m中分割/拆分真正大型项目的最佳做法有所贡献

4 个答案:

答案 0 :(得分:18)

一些帮助我的事情

  • 将多模块项目用于相关的项目,并仅使用相关的项目。仅存在于单个EAR中的EJB是此类的候选者。 EJB和客户端应用程序使用的bo层不是。
  • 每个pom一个工件,每个多模块项目可部署一个不要浪费时间试图解决这个问题。
  • 创建包含常见依赖关系的依赖关系poms 。这样,您可以将DAO,jdbc驱动程序和ORM工具包含在一个依赖项中。它还使得将数十个项目升级到最新版本的ORM或DAO变得更加容易。
  • 创建构建器项目,仅用于运行程序集和创建部署集。这将使项目的多个部分保持同步。组装大型复杂企业应用程序通常很复杂,您需要混合使用maven,shell脚本和/或ant:运行任务以及数十个配置文件。将混乱放在远离代码的项目中将会在传播之前包含混乱。
  • 创建测试人员项目,以便持续集成使用。在这些poms中定义Web和app服务器以及测试部署信息。使用父项目和公共属性文件将使测试部署更改变得更容易。
  • 仅在父pom中定义distributionManagement ,如果可以使所有子项目成为子项目(或其子项)。
  • 在每次构建时,尽量不要依赖大文件(EAR,WAR)填充到您的存储库中。在每个快照上不需要将175mb WAR推送到nexus就可以改善我们的构建时间。
  • 尝试尽可能少地定义事物。 DRY构建是一个快乐的构建。使用junit 3.8.2使用源版本1.5或30 poms的30个poms将更难以升级到java 6或junit 4.4。

希望这有帮助。

答案 1 :(得分:8)

我很高兴使用Multi-module Enterprise Project中的Maven by Example布局。阅读它以获取灵感并将其用于适合您的方案。 alt text

答案 2 :(得分:7)

以下是一些指示:

  • 在公共父级或使用中声明依赖项版本声明特定项目的dependencyManagement中的版本,并使用import scope引用它。
  • Avoid unversioned plugins。在pluginManagement部分声明插件版本。
  • 在父pom中声明常见的插件配置,尤其是报告配置。
  • Don't declare repositories in your POMs
  • 使用Nexus
  • 等存储库管理器
  • 使用属性允许子项目继承配置,但覆盖键值(例如,在distributionManagement的url中)
  • 设置continuous integration server。开发中的项目应具有SNAPSHOT版本并定期部署到存储库。

答案 3 :(得分:0)

这都是调整。 Maven没有全部也没有最新。我here救了我,你可以看一下,感觉什么是适合你的。

<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.appspot.classifiedsmarket</groupId>
  <artifactId>classifiedsmarket</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>classifiedsmarket Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.12</version>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>httpunit</groupId>
            <artifactId>httpunit</artifactId>
            <version>1.6.1</version>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>struts</groupId>
            <artifactId>struts</artifactId>
            <version>1.2.9</version>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.6</version>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>informa</groupId>
            <artifactId>informa</artifactId>
            <version>0.6.0</version>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>org.jasypt</groupId>
            <artifactId>jasypt</artifactId>
            <version>1.3</version>
            <scope>compile</scope>
        </dependency>
    <dependency>
            <groupId>htmlunit</groupId>
            <artifactId>htmlunit</artifactId>
            <version>1.9</version>
            <scope>compile</scope>
        </dependency>

    <dependency>
 <groupId>javax.activation</groupId>
 <artifactId>activation</artifactId>
 <version>1.1</version>
</dependency>
<dependency>
 <groupId>javax.mail</groupId>
 <artifactId>mail</artifactId>
 <version>1.4</version>
</dependency>
<dependency>
            <groupId>dwr</groupId>
            <artifactId>dwr</artifactId>
            <version>1.1.3</version>
            <scope>compile</scope>
        </dependency>
<dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.2.2</version>
            <scope>compile</scope>
        </dependency>
<dependency>
            <groupId>commons-pool</groupId>
            <artifactId>commons-pool</artifactId>
            <version>1.4</version>
            <scope>compile</scope>
        </dependency>
<dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.1.2</version>
            <scope>compile</scope>
        </dependency>
<dependency>
            <groupId>taglibs</groupId>
            <artifactId>standard</artifactId>
            <version>1.1.2</version>
            <scope>compile</scope>
        </dependency>









  </dependencies>
  <build>
    <finalName>classifiedsmarket</finalName>
    <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>RELEASE</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>RELEASE</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>RELEASE</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
  </build>
  <properties>
        <netbeans.hint.deploy.server>Tomcat55</netbeans.hint.deploy.server>
    </properties>
</project>