Maven多模块项目的参考资料

Sonatype上的教程 http://books.sonatype.com/mvnex-book/reference/multimodule.html

在这个教程里, 提供了一个多模块的maven项目例子供下载, 可以直接套用于实际项目.

IntelliJ Idea14里的创建步骤

1. File -> New -> Project -> Maven, 选择SDK后, 不要选Create from archetype, -> Next,

2. 填写GroupId, 例如 com.mydomain.myproject, 填写ArtifactId, 例如 hold-on-service 我建的是dubbo项目, 这里填个大service名称, Version 默认, -> Next

3. 填写Project name, 就用ArtifactId, 如 hold-on-service, 选好项目地址, -> Finish

4. 新建好的项目里, 删掉系统创建的src目录

5. 开始创建子模块. File -> New -> Module -> Maven, 如果是公共模块, 就不要选Create from archetype, -> Next, 如果不是公共模块, 例如是实际的service提供模块, 则根据需要选择相应模板.

6. GroupId和版本按默认, ArtifactId 根据模块类型填写, 例如 hold-on-service-api, 或者 hold-on-service-impl, 一路Next -> Finsh

7. 编辑主项目的pom.xml, 注意要指定compile的source和target, 不然每次IDEA里面reimport之后, 配置都会被重置, 每次要改很麻烦

<?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.mydomain.holdon</groupId>
<artifactId>vk-session</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version> <name>Holdon Project: Session Service</name> <modules>
<module>session-service-api</module>
<module>session-service-impl</module>
</modules> <build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>

8. 编辑公共子模块的pom.xml, 注意packaging类型

<?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>vk-session</artifactId>
<groupId>com.mydomain.holdon</groupId>
<version>1.0-SNAPSHOT</version>
</parent> <name>Holdon Project: Session Service API</name> <artifactId>vk-session-api</artifactId>
<packaging>jar</packaging> <dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
</dependencies> </project>

9. 编辑实体子模块的pom.xml, 注意这里要添加对公共模块的依赖, 不然每次reimport后, 依赖关系会丢失

<?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>vk-session</artifactId>
<groupId>com.mydomain.holdon</groupId>
<version>1.0-SNAPSHOT</version>
</parent> <name>Holdon Project: Session Service Publish</name> <artifactId>vk-session-impl</artifactId>
<packaging>war</packaging> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.springframework.version>3.1.1.RELEASE</org.springframework.version>
</properties> <dependencies>
<!-- Spring Dependencies Start -->
<!-- Core utilities used by other modules, Define this if you use Spring
Utility APIs(org.springframework.core.*/org.springframework.util.*) -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<!-- Spring Dependencies End -->
......
<dependency>
<groupId>com.mydomain.holdon</groupId>
<artifactId>vk-session-api</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies> </project>

可以设置一个全局的pom, 把所有的模块都组织起来.一些公司里公用的dependency以及版本, 都配置在

这个pom只配置在svn和CI工具里, deploy的时候, 会自动checkout整个最新的主干, deploy到maven repository.

开发的时候, 只需要使用这个下面的大模块, pom里面的parent, maven会自动到repository下找依赖.

Update: 新建项目时, 用最顶层的pom建, 会自动变成多层模块的项目, 然后把顶层的项目delete掉, 然后第二层的module就变成顶层了, 而且顶层的pom.xml还在项目里.

Update 2017-04-08: 以上适用于使用svn仓库的项目, 不适用于git

Update 2018-10-11: 在Maven 中除了用继承parent来做版本控制以外, 还可以通过 scope=import 来做版本控制.

Maven 2.0.9 添加了一个新特性: scope = import 也就是从外部导入依赖管理的依赖配置. 使用过 DependencyManagement都知道, 多模块构建项目的时候, 为了解决各模块依赖版本一致, 统一在父pom.xml文件中统一定义各个依赖jar文件的版本, 然后子模块通过引用的方式添加需要的依赖jar, 但随着项目工程越来越大, 添加的依赖文件也越来也多, 父pom.xml的 DependencyManagement 也会越来越长, 不便于管理. 另外, 因为pom.xml 是单继承的, 如果已经有一个父pom.xml了, 想要再引用外部的pom.xml, 就只能复制到父pom.xml中了. 因此采用在 DependencyManagement 中使用scope = import的方式可以分类引入更多的管理配置, 也摆脱了单继承的限制. 举例, 在子模块的<project></project>中增加这一段用于引入其他pom.xml的依赖配置

    <dependencyManagement>
<dependencies>
<dependency>
<groupId>com.rockbb</groupId>
<artifactId>my-java-pom</artifactId>
<version>1.2-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

而这个被引入的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> <groupId>com.rockbb</groupId>
<artifactId>my-java-pom</artifactId>
<version>1.2-SNAPSHOT</version>
<packaging>jar</packaging> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<kbsjava.default.version>1.2-SNAPSHOT</kbsjava.default.version> <springboot.version>2.0.3.RELEASE</springboot.version>
<c3p0.version>0.9.5.2</c3p0.version>
<mysql.version>6.0.3</mysql.version>
<mybatis.version>3.4.1</mybatis.version>
<mybatis-spring.version>1.3.0</mybatis-spring.version>
...
<dom4j.version>2.1.1</dom4j.version>
</properties> <repositories>
<repository>
<id>...</id>
<name>...</name>
<url>https://...</url>
</repository>
</repositories> <distributionManagement>
<repository>
<id>...</id>
<name>...</name>
<url>https://...</url>
</repository>
<snapshotRepository>
<id>...</id>
<name>...</name>
<url>https://...</url>
<uniqueVersion>false</uniqueVersion>
</snapshotRepository>
</distributionManagement> <dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
...
<dependency>
<groupId>org.dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>${dom4j.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>

IntelliJ Idea14 创建Maven多模块项目的更多相关文章

  1. IntelliJ Idea14 创建Maven多模块项目,多继承,热部署配置总结(三)

    pom.xml中repositories.pluginRepository的作用 pom.xml中repositories标签的作用是: 用来配置maven项目的远程仓库.示例如下: <repo ...

  2. Maven(4)-利用intellij idea创建maven 多模块项目

    本文通过一个例子来介绍利用maven来构建一个多模块的jave项目.开发工具:intellij idea. 一.项目结构 multi-module-project是主工程,里面包含两个模块(Modul ...

  3. 使用IntelliJ IDEA创建Maven多模块项目

    转载:http://blog.csdn.net/xyw591238/article/details/52794788 使用Maven管理项目时,往往需要创建多个模块,模块之间存在相互引用的关系.对于M ...

  4. IntelliJ IDEA创建maven多模块项目

    创建完成后的目录结构如下: 一.项目主要分成3个模块,yves-parent为父模块,yves-dao和yves-web(webapp类型的模块)为子模块. 二 .Parent Project,创建y ...

  5. 在IntelliJ IDEA中创建Maven多模块项目

    在IntelliJ IDEA中创建Maven多模块项目 1,创建多模块项目选择File>New>Project 出现New Project窗口左侧导航选择Maven,勾选右侧的Create ...

  6. springboot创建maven多模块项目

    SpringBoot创建maven多模块项目 项目结构 该项目名称为springboot-maven-multi,由springboot-maven-multi.user-dao.user-domai ...

  7. 在Eclipse中创建Maven多模块项目

    在Eclipse中创建Maven多模块项目1,创建多模块项目选择File>New>Project,打开New Project窗口,选择Maven>Maven Project,选择下一 ...

  8. Maven(二)使用eclipse创建maven多模块项目

    maven作为一种自动化构建工具,在现在的企业应用开发中运用非常普遍. 企业项目一般都比较大,多采用maven管理的多模块项目,下面直接上创建步骤 一.创建一个maven项目

  9. 利用intellijidea创建maven多模块项目

    一.项目结构 multi-module-PRoject是主工程,里面包含两个模块(Module): web-app是应用层,用于界面展示,依赖于web-service参的服务. web-service ...

随机推荐

  1. Android-SQLite版本问题

    1. 用户 重来没有使用过该软件 不存在数据库,我们 1). 自动调用 void onCreate(SQLiteDatabase db) 方法 创建数据库 2).创建 表 , 3).给表插入初始化数据 ...

  2. android am命令以及hotkey文件的编写

    1.拨打电话:am start -a android.intent.action.CALL -d tel:10086 这里-a表示动作,-d表述传入的数据,还有-t表示传入的类型. 2. 打开一个网页 ...

  3. Swift开发第十一篇——Designated、Convenience和Required

    本篇主要讲解 Swift 中 Designated.Convenience和 Required 的使用: 在 OC 中 init 方法是非常不安全的,没人能够保证 init 只被调用一次,也没有人保证 ...

  4. 网络请求之JSON解析

    <一>JSON的基本知识 什么是JSON:JSON的全称是JavaScript Object Notation(JavaScript对象符号),是目前使用最广泛的数据交换格式,具有跨平台. ...

  5. MonoDevelop编辑器中文乱码解决

    说解决乱码分几步,总共分三部! 1. Tools -> Options 2. 3.点击Font->点击TextEditor会出现下边选框,选取喜欢风格并且不乱码即可.

  6. 设计模式 之 策略(Strategy)模式

    最近看了<head first 设计模式>一书,便总结了里面的一些内容,今天就简单介绍一下策略模式. 策略模式:定义了算法族,分别封装起来,让他们能够相互替换,此模式让算法的变化独立于使用 ...

  7. 深入理解“HelloWorld”小程序

    对于每个Java程序员来说,HelloWorld是一个再熟悉不过的程序.它很简单,但是这段简单的代码能指引我们去深入理解一些复杂的概念.这篇文章,我将探索我们能从这段简单的代码中学到什么.如果你对He ...

  8. Java虚拟机内存管理原理基础入门

    Jdk:Java程序设计语言.Java虚拟机.Java API类库. Jdk是用于支持Java程序开发的最小环境. Jre:Java API类库中的Java SE API子集.Java虚拟机. Jre ...

  9. ORACLE SQL Developer日期显示格式设置

    ORACLE的SQL Developer工具默认的日期格式DD-MON-RR,在SQL查询中往往你看不到时间信息,此时你必须修改日期格式.具体如下所示 工具->首选项->数据库->N ...

  10. 0014 Java学习笔记-集合-HashMap集合

    主要的方法 + 构造方法: * HashMap(); - 默认大小16,负载因子0.75 * HashMap(int initialCapacity); * HashMap(int initialCa ...