如何搭建一个多模块分布式maven项目

知兮丶青 spring
阅读(1866) 2017-12-19
如何搭建一个多模块分布式maven项目
如何搭建一个多模块分布式maven项目

maven搭建项目使用方便,灵活性高,自动依赖,使项目高内聚,低耦合,轻松编译、打包、部署等等。


我的环境

InteIIiJ IDEA 2016.1

maven 3.0.5

jdk 1.7

tomcat 7.0.72

window7


目录结构

1、搭建介绍

demo

  |-- demo-common //公用模块 jar(quickstart)

  |-- demo-parent //父模块 pom(quickstart)

  |-- demo-wechat //其中一个子模块 war(webapp)

  |-- demo-xxx

  |-- ...

简单介绍

demo-common:公用模块,将自动打包为jar,放入指定项目war

demo-parent:父模块,统一管理各个模块的jar包和版本,打包等

demo-wechat:其中一个子模块(即是项目,可多个)关联了模块common


2、也可搭建

demo

  |-- demo-api //api接口模块 jar(quickstart)

  |-- demo-parent //父模块 pom(quickstart)

  |-- demo-service //serice服务模块 jar(quickstart)

  |-- demo-web //web模块 war(webapp)

  |-- ...


一、创建根目录

1、进入IDEA项目工作空间目录(如我的是:D:\XQ\IdeaProjects)。

2、在该目录下新建一个目录demo,作为项目的根目录。

3、项目的所有模块将存在这个demo目录。

创建跟目录.png



二、创建父项目

1、开始

打开IDEA,点击新建项目。

如果是第一次打开,点击Create New Project。

如果不是,点击File->New->Project。

创建父项目1.png


2、选择

接着选择Maven -> 勾选Create from archetype -> maven-archetype-quickstart。

创建父项目2.png


3、命名

填写 GroupId 和 ArtifactId 。

GroupId:指当前jar所属命名空间,当前Maven项目隶属项目(实际对应JAVA的包的结构, 是main目录里java的目录结构)

ArtifactId:当前项目模块名称,实际项目中的一个模块(项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称)

这里填写:

GroupId:com.weizhixi

ArtifactId:demo-parent

创建父项目3.png


4、maven

根据你的maven配置选择Maven home directory、勾选User settings file和Local repository

是否需要Override。我这里选择默认就好。

创建父项目4.png


5、项目

填写项目名称:demo-parent。注意路径!在demo目录下。然后点击完成。

创建父项目5.png


6、配置

由于父项目需要用于管理java版本打包部署等,代码不写在这里,不需要src,故删掉。

修改demo-parent下的 pom.xml的packaging值 jar 为 pom

创建父项目6.png



第三步:创建公用项目

1、开始

选择 demo-parent 点击File->New->Module。

创建公用项目1.png


2、选择

接着选择maven -> 勾选create from archetype -> maven-archetype-quickstart。

创建公用项目2.png


3、命名

这里需要注意:第一项选none、第二项默认就好,第三项默认、第四项填写你的公用模块名称、第五项默认。

点击Add as module to 选择 <none>。

填写公共模块名称:demo-common。

创建公用项目3.png


4、maven

根据你的maven配置选择。


5、项目

填写公用模块名称:demo-common。注意路径!也在demo目录下。点击完成。



第四步:创建子项目

1、开始

选择 demo-parent 点击File->New->Module。

创建子项目0.png



2、选择

接着选择maven -> 勾选create from archetype -> maven-archetype-webapp。

创建子项目1.png


3、命名

点击Add as module to 选择 <none>。

填写子模块(项目)名称,例如我这个子项目作为微信项目,命名为:demo-wechat。

创建子项目2.png


4、maven

根据你的maven配置选择。


5、项目

填写公用模块名称:demo-wechat。注意路径!也在demo目录下。点击完成。



第五步:项目配置

1、目录

创建完之后目录机构如图所示。

配置项目1.png


2、配置项目

点击File->Project Structure

配置项目2.png


3、设置项目

选择Modules->demo-common->sources

3.1、src.main.java目录标志为Sources(蓝色)

3.2、src.test.java目录标志为Tests(绿色)

接着选择demo-common->sources

3.3、在src/main下,右键New Folder新建java目录

3.4、src.main.java目录标志为Sources(蓝色)

配置项目3.png


4、配置pom

添加相关依赖包,这里配置依赖为:Springmvc4.3 + Hibernate4 .3 + jpa1.7

jar包及版本在parent配置就好,其他子项目不需要配置。

demo-parent->pom.xml

<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.weizhixi</groupId>
    <artifactId>demo-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>pom</packaging>

    <modules>
        <module>../demo-common</module>
        <module>../demo-wechat</module>
    </modules>

    <name>demo-parent</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compile.plugin.version>2.5.1</maven.compile.plugin.version>
        <maven.surefire.plugin.version>2.12.4</maven.surefire.plugin.version>

        <spring.version>4.3.1.RELEASE</spring.version>
        <spring-data-jpa.version>1.7.1.RELEASE</spring-data-jpa.version>

        <hibernate.version>4.3.6.Final</hibernate.version>
        <hibernate-validator.version>4.3.2.Final</hibernate-validator.version>

        <commons-beanutils.version>1.9.1</commons-beanutils.version>
        <commons-io.version>2.4</commons-io.version>
        <commons-fileupload.version>1.2.1</commons-fileupload.version>
        <commons-codec.version>1.9</commons-codec.version>
        <commons-lang3.version>3.2.1</commons-lang3.version>

        <jsp.version>2.1</jsp.version>
        <jstl.version>1.2</jstl.version>
        <servlet.version>3.0.1</servlet.version>

        <mysql.version>5.1.13</mysql.version>
        <alibaba-druid.version>1.0.9</alibaba-druid.version>
        <orika.version>1.4.2</orika.version>
        <jackson.version>2.5.0</jackson.version>
        <slf4j.version>1.7.5</slf4j.version>
        <junit.version>3.8.1</junit.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>${spring-data-jpa.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${hibernate-validator.version}</version>
        </dependency>

        <dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>${commons-beanutils.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>${commons-io.version}</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>${commons-codec.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3.version}</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>${jsp.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${alibaba-druid.version}</version>
        </dependency>
        <dependency>
            <groupId>ma.glasnost.orika</groupId>
            <artifactId>orika-core</artifactId>
            <version>${orika.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>${slf4j.version}</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compile.plugin.version}</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.version}</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
,

注意:父项目pom已经加入modules关联了demo-common、demo-wechat了


demo-common->pom.xml

<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>demo-parent</artifactId>
        <groupId>com.weizhixi</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../demo-parent/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>demo-common</artifactId>
    <packaging>jar</packaging>

    <name>demo-common</name>
    <url>http://maven.apache.org</url>

</project>

注意:作为公用模块这里无需关联依赖。


demo-wechat->pom.xml

<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">
    <parent>
        <artifactId>demo-parent</artifactId>
        <groupId>com.weizhixi</groupId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../demo-parent/pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>demo-wechat</artifactId>
    <packaging>war</packaging>

    <name>demo-wechat</name>
    <url>http://maven.apache.org</url>

    <dependencies>
        <dependency>
            <groupId>com.weizhixi</groupId>
            <artifactId>demo-common</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>

    <build>
        <finalName>demo-wechat</finalName>
    </build>
</project>

注意:这里需要加入对 demo-common 的依赖,如代码所示。


5、配置tomcat

点击Edit Configurations

配置项目7.png

打开后,点击+加号,选择Tomcat Server -> Local

配置项目8.png

命名好后,点击Deployment,接着点击+加号,后选择demo-wechat:war exploded

ok -> apply -> ok

配置项目9.png


6、打包

点击Reimport All maven Projects,刷新重新导入所有的Maven项目jar

clean清除,compile编译,package打包。

生成的war包直接可以部署的。

[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] demo-parent ....................................... SUCCESS [0.003s]
[INFO] demo-common ....................................... SUCCESS [3.867s]
[INFO] demo-wechat ....................................... SUCCESS [5.875s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.946s
[INFO] Finished at: Wed Dec 20 01:02:31 GMT+08:00 2017
[INFO] Final Memory: 16M/39M
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

出现 code 0 表示打包成功。

注意看下:打包的时候wechat的lib上已经生成关联common的jar包了。

如:我的,D:\XQ\IdeaProjects\demo\demo-wechat\target\demo-wechat\WEB-INF\lib\demo-common-1.0-SNAPSHOT.jar


配置项目6.png

点击 tomcat Run或者Debug, 然后点击运行就可以了。


配置完毕,接下来就是开发、编码。


I 也是略懂皮毛,说的不对或不好的地方请指出给以改正哈,互相学习互相提高哈。



zip icon
一个多模块分布式maven空项目.zip 9abcd8348ef01114a0414de303be5b03

已下载:290

原创文章,转载请注明出处:https://www.weizhixi.com/article/36.html