Maven分布式项目构建详解

本文详述了Maven分布式项目的构建过程,包括如何创建父项目与子项目,以及这样构建的好处。通过parent项目管理,可以一次性执行清理、打包、安装等操作,确保所有子模块同步处理。同时,文中介绍了各个模块的pom配置文件内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

     首先看一张图:



     画这张图的时候,我其实有过纠结的地方:demo-util究竟是放在parent上面好,还是和parent没关系,直接在demo-model,demo-persist,demo-serivce,demo-web直接依赖demo-util好?最后还是考虑到用前者,直接方便,不需要每一层都依赖demo-util(我把这个工具类最后改名字为common-utils),画虚线的demo-webUtils可能是可有可无,项目如果没有分这么细的话就不需要了。


那么如何创建parent项目,以及在parent中如何创建依赖的子项目呢,这么创建项目有什么好处吗?

      a.创建父项目

                            Maven
     ---------Check out Maven Projects from SCM
          ---------Maven Module
                                          ---------Maven Project

                以上是在Maven项目中会看到的项目选项,选择Maven Project,截图如下所示:




      b.创建子项目:

                  Maven
      ---------Check out Maven Projects from SCM
          ---------Maven Module
                                          ---------Maven Project

                以上是在Maven项目中会看到的项目选项,选择Maven Module,截图如下所示:

              

           

OK,创建成功后就可以在parent项目中看到下面的子项目和一个pom.xml配置文件。这么依赖的好处就是:通过parent父项目的管理,可以直接在parent项目中进行clearn,package,install,则其他子项目也都进行相应的clearn,package,install,做到一次执行,所有的项目都进行清理,不遗留一个子模块。



接下来详细说说各个pom文件的内容:

      照着原理图,我在本机上面创建了common-utils,demo-parent,demo-model,demo-service,demo-web这个四个5个maven项目。

common-utils的pom文件:

           

<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.lgy</groupId>
  <artifactId>common-utils</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>jar</packaging>
  <name>common-utils</name>
  <url>http://maven.apache.org</url>
  
  <!-- 规范版本-->
  <properties>
	    <junit-version>4.10</junit-version> 
  </properties>

  <!-- 依赖的jar包 -->
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit-version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
</project>
                 *common-utils是单独的一个maven项目,里面若需要一些jar包,得自己加入依赖。


demo-parent的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.lgy</groupId>
  <artifactId>demo-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <modules>
    <module>demo-model</module>
    <module>demo-service</module>
    <module>demo-web</module>
  </modules>
  
  <!-- 规范版本-->
  <properties>
		<maven-jetty-plugin-version>6.1.22</maven-jetty-plugin-version>
		<junit-version>4.10</junit-version>
		<mysql-version>5.1.14</mysql-version>
		<common-util-version>0.0.1-SNAPSHOT</common-util-version>
		<project.build.sourceEncoding-format>UTF-8</project.build.sourceEncoding-format>
  </properties>
  
  <!-- 定义common的jar包-->
  <dependencies>
  	  <dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>${mysql-version}</version>
	  </dependency>
	  <dependency>
	  	    <groupId>${project.groupId}</groupId>
	  	    <artifactId>common-utils</artifactId>
			<version>${common-util-version}</version>
	  </dependency>
  </dependencies>
</project>
                       *parent的pom配置文件主要是规范版本号和定义公用的jar包的这么一个配置文件,同时也规范了groupId,version。在后面继承了parent的maven项目就会自动继承这些东西,所以不需要依赖jar,或者groupId,version。


demo-model的pom配置文件:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.lgy</groupId>
    <artifactId>demo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>demo-model</artifactId>
  <name>demo-model</name>
  <url>http://maven.apache.org</url>
  
  <dependencies>
    
  </dependencies>
</project>
            *只需要写artifactId,其他的和parent中的相同。


demo-service的pom配置文件:

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.lgy</groupId>
    <artifactId>demo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>demo-service</artifactId>
  <name>demo-service</name>
  <url>http://maven.apache.org</url>
  <dependencies>
	<dependency>
		<groupId>${project.groupId}</groupId>
		<artifactId>demo-model</artifactId>
		<version>${project.version}</version>
	</dependency>
  </dependencies>
</project>
             *service项目此时依赖model,${project.groupId}是本项目的proupId,${project.version}是本项目中的version号。


demo-web的pom配置文件:

<?xml version="1.0"?>
<project
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>com.lgy</groupId>
		<artifactId>demo-parent</artifactId>
		<version>0.0.1-SNAPSHOT</version>
	</parent>
	<artifactId>demo-web</artifactId>
	<packaging>war</packaging>
	<name>demo-web Maven Webapp</name>
	<url>http://maven.apache.org</url>
	
	<dependencies>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>servlet-api</artifactId>
			<version>2.4</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>${project.groupId}</groupId>
			<artifactId>demo-service</artifactId>
			<version>${project.version}</version>
		</dependency>
	</dependencies>
	
	<build>
		<finalName>demo-web</finalName>
		<pluginManagement>
			<plugins>  
            <plugin>  
                <groupId>org.mortbay.jetty</groupId>  
                <artifactId>maven-jetty-plugin</artifactId>  
                <version>${maven-jetty-plugin-version}</version>  
                <configuration>  
                    <scanIntervalSeconds>10</scanIntervalSeconds>  
                    <useTestClasspath>true</useTestClasspath>  
                    <webAppConfig>  
                        <contextPath>/demo-web</contextPath>  
                    </webAppConfig>  
                    <connectors>  
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">  
                            <port>8080</port>  
                        </connector>  
                    </connectors>  
                </configuration>  
            </plugin>  
            </plugins>
		</pluginManagement>
	</build>
</project>

到此结束!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值