`

Maven多项目依赖配置

 
阅读更多

最近在学习Maven,把一个开源的项目改成maven管理,期间使用到了多项目,从网上查阅了一些资料,主要参考的是http://kyfxbl.iteye.com/blog/1680045,在此把自己的一些心得体会写出来,供大家学习交流。

关于maven的安装,在此就不进行阐述,请参考网上其他教程。

本实例由4个项目组成,其中,aggregator是父工程,同时承担聚合模块和父模块的作用,没有实际代码和资源文件open-plagform-common是公共的java工程;open-platfor-web是公共的web文件,主要包括cssjs等;open-bug-m是最终要发布的应用,形成war包。

一、建立一个Maven工程:aggregator

/aggregator

   /src/main/java

   /src/test/java

   pom.xml

 

 

此工程主要是父模块,聚合其他工程,没有实际代码和资源文件,最主要的是pom.xml文件,其主要内容如下:

<modelVersion>4.0.0</modelVersion>
  <groupId>cn.jess.platform</groupId>
  <artifactId>aggregator</artifactId>
  <version>0.0.1-SNAPSHOT</version>
<!-- 因为是父工程 ,因此此处的packaging必须为pom -->
  <packaging>pom</packaging>
  <name>aggregator</name>
  
  <modules>  
    <module>../open-platform-common</module>  
    <module>../open-platform-web</module>  
    <module>../open-bug-m</module>
  </modules>
  
  <!-- 配置部署的远程仓库 -->  
  <distributionManagement>  
    <snapshotRepository>  
      <id>nexus-snapshots</id>  
      <name>nexus distribution snapshot repository</name>  
      <url>http://127.0.0.1:8081/nexus/content/repositories/snapshots/</url>  
    </snapshotRepository>  
  </distributionManagement>
  
  <build>  
     <pluginManagement>  
       <plugins>  

             <plugin>  
                 <groupId>org.apache.maven.plugins</groupId>  
                 <artifactId>maven-resources-plugin</artifactId>  
                 <version>2.6</version>  
                 <configuration>  
                     <encoding>UTF-8</encoding>  
                 </configuration>  
             </plugin>  

             <plugin>  
                 <groupId>org.apache.maven.plugins</groupId>  
                 <artifactId>maven-compiler-plugin</artifactId>  
                 <version>2.5.1</version>  
                 <configuration>  
                     <encoding>UTF-8</encoding>
                     <source>1.6</source>
          			 <target>1.6</target>  
                 </configuration>  
             </plugin>  

         </plugins>  
     </pluginManagement>  
 </build>  
  
 <dependencyManagement>  

     <dependencies>  

         <dependency>  
             <groupId>com.sun</groupId>  
             <artifactId>tools</artifactId>  
             <version>1.6.0</version>  
             <scope>system</scope>  
             <systemPath>${env.JAVA_HOME}/lib/tools.jar</systemPath>  
         </dependency>  

     </dependencies>  

 </dependencyManagement>

    二、建立一个Maven工程:open-platform-common

 

此工程主要是项目中使用到的公共java类库,pom文件主要内容如下:

 

<!-- 由于存在parent工程,因此groupId和version可以省略,直接使用parent工程-->
  <modelVersion>4.0.0</modelVersion>
  <artifactId>open-platform-common</artifactId>
 <!-- 因为此工程要发布到webapp的lib目录下,因此为jar(不知道这样解释对否?) -->
 <packaging>jar</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>  
  	<!-- 指定Maven仓库 -->
	<repositories>
		<!-- my的maven仓库 -->
		<repository>
			<id>myRepository</id>
			<name>local private nexus</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
  <!-- 指定maven plugin仓库 -->
	<pluginRepositories>
		<!-- oschina的maven plugin仓库 -->
		<pluginRepository>
			<id>myPluginRepository</id>
			<name>local private nexus</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
  <dependencies>
    	<!-- 此处的类库根据自己的需要进行添加 -->
  </dependencies>
  <!-- 用来指定父工程-->
  <parent>
  	<groupId>cn.jess.platform</groupId>
  	<artifactId>aggregator</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  	<relativePath>../aggregator</relativePath>
  </parent>

    三、建立一个Maven工程:open-platform-web

    此工程主要是项目中使用到的公共web文件pom文件主要内容如下:

 

<!-- 由于存在parent工程,因此groupId和version可以省略,直接使用parent工程-->
  <modelVersion>4.0.0</modelVersion>
  <artifactId>open-platform-web</artifactId>
<!-- 因为此工程要发布到webapp应用的根目录下,因此为war(不知道这样解释对否?) -->
  <packaging>war<ng>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>  
  	<!-- 指定Maven仓库 -->
	<repositories>
		<!-- my的maven仓库 -->
		<repository>
			<id>myRepository</id>
			<name>local private nexus</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
  <!-- 指定maven plugin仓库 -->
	<pluginRepositories>
		<!-- oschina的maven plugin仓库 -->
		<pluginRepository>
			<id>myPluginRepository</id>
			<name>local private nexus</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
  
  <parent>
  	<groupId>cn.jess.platform</groupId>
  	<artifactId>aggregator</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  	<relativePath>../aggregator</relativePath>
  </parent>
</project>

    注意:此工程的WEB-INF目录下必须包含web.xml文件,否则在执行mvn时会报错

    四、建立一个Maven工程:open-bug-m

此工程是最终要发布的应用,其依赖于open-platform-commonopen-platform-web,因此在pom文件中要加入这两个工程的依赖,pom文件内容如下所示:

 

<groupId>open-bug-m</groupId>
  <artifactId>open-bug-m</artifactId>
  <packaging>war</packaging>
  <name/>
  <description/>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>
  <parent>
  	<groupId>cn.jess.platform</groupId>
  	<artifactId>aggregator</artifactId>
  	<version>0.0.1-SNAPSHOT</version>
  	<relativePath>../aggregator</relativePath>
  </parent> 
  	<!-- 指定Maven仓库 -->
	<repositories>
		<!-- my的maven仓库 -->
		<repository>
			<id>myRepository</id>
			<name>local private nexus</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
  <!-- 指定maven plugin仓库 -->
	<pluginRepositories>
		<!-- oschina的maven plugin仓库 -->
		<pluginRepository>
			<id>myPluginRepository</id>
			<name>local private nexus</name>
			<url>http://127.0.0.1:8081/nexus/content/groups/public/</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</pluginRepository>
	</pluginRepositories>
  <dependencies>
  	<dependency>
      <groupId>cn.jess.platform</groupId>
	  <artifactId>open-platform-common</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <type>jar</type>
    </dependency>
    <dependency>
      <groupId>cn.jess.platform</groupId>
	  <artifactId>open-platform-web</artifactId>
	  <version>0.0.1-SNAPSHOT</version>
	  <type>war</type>
    </dependency>      
	<!-- 此处的类库根据自己的需要进行添加 -->

	
  </dependencies>
  <build>
  	<finalName>open-bug</finalName>
    <plugins>
      <plugin>  
          <groupId>org.apache.maven.plugins</groupId>  
          <artifactId>maven-war-plugin</artifactId>
          <version>2.3</version>  
          <configuration>  
             <packagingExcludes>WEB-INF/web.xml</packagingExcludes>    
             <overlays>  
                <overlay>  
                  <groupId>cn.jess.platform</groupId>  
                  <artifactId>open-platform-web</artifactId>  
                </overlay>  
             </overlays>  
          </configuration>  
      </plugin>  
      <plugin>  
        <groupId>org.codehaus.cargo</groupId>  
        <artifactId>cargo-maven2-plugin</artifactId>  
        <version>1.2.3</version>  
        <configuration>  
          <container>  
            <containerId>tomcat7x</containerId>  
            <home>F:\apache-tomcat-7.0.42(x64)</home>  
          </container>  
          <configuration>  
            <type>existing</type>  
            <home>F:\apache-tomcat-7.0.42(x64)</home>  
            <properties>  
              <cargo.jvmargs>  
                  -Xdebug                    -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8787  
              </cargo.jvmargs>  
            </properties>  
          </configuration>  
        </configuration>  
        <executions>  
          <execution>  
             <id>cargo-run</id>  
             <phase>pre-integration-test</phase>  
             <goals>  
                 <goal>run</goal>  
             </goals>  
          </execution>  
        </executions>  
    </plugin> 
    </plugins>
  </build>

    关于maven-war-plugincargo-maven2-plugin的使用方法请参考网上其他使用教程。

所有上述四个工程准备就绪后,执行mvn install就可对工程项目进行部署。

现在存在的一个问题主要是:

如果把open-platform-commonopen-platform-web工程合并为一个,则在open-bug-m不知道如何去引用它?

 

 

 

分享到:
评论
2 楼 smartdog 2017-02-06  
使用的maven的版本很老的,而且写的不是很清楚,建议可以参考下http://juvenshun.iteye.com/blog/305865

相关推荐

    Maven 多项目依赖关系

    每个Maven项目都有一个核心配置文件——`pom.xml`,它定义了项目的元数据,包括项目名称、版本、描述、开发者信息以及项目依赖。在多项目环境中,`pom.xml`文件还负责声明其他子项目或外部库的依赖关系。 二、模块...

    maven项目的配置POM配置文件

    maven项目的配置POM配置文件,主要是maven项目的配置,直接从中央仓库下载内容。

    ​实现maven项目中多版本依赖兼容使用解决方案

    以下是如何实现Maven项目中多版本依赖兼容的解决方案: 1. **理解Maven依赖管理**: Maven依赖管理遵循“传递性”原则,即项目可以直接依赖其他项目,间接依赖也会被自动引入。当出现相同类路径的冲突时,Maven会...

    maven 配置多仓库

    Maven默认使用中央仓库,但有时我们需要配置多个仓库,例如私有仓库,以提高依赖下载速度或管理内部私有构件。本文将详细介绍如何在Maven中配置多仓库。 ### Maven仓库类型 1. **中央仓库**:Maven官方维护的公共...

    添加非托管到Maven项目依赖关系.doc

    "Maven 项目依赖关系管理" Maven 项目依赖关系管理是 Java 应用程序开发中非常重要的一步。Maven 是一种流行的项目管理工具,可以帮助开发者快速构建和管理项目。然而,在实际开发中,我们常常会遇到一些不可以在...

    maven 中引入依赖的包

    这是每个Maven项目的心脏,它定义了项目的配置信息,包括项目的基本信息(如groupId、artifactId、version),以及项目依赖的外部库。当你需要引入一个新的依赖包时,你需要编辑`pom.xml`文件,添加相应的`...

    maven依赖小例子

    POM.xml文件是每个Maven项目的核心配置文件,它包含了项目的元数据、构建指令以及依赖列表。 首先,让我们了解POM.xml文件的结构。POM通常包含以下元素: 1. `&lt;project&gt;`:整个配置的根元素。 2. `&lt;modelVersion&gt;`...

    idea使用maven创建web项目详细教程

    pom.xml 文件是 Maven 项目的核心配置文件,用于定义项目的信息、项目依赖、引入插件等。通过 pom.xml 文件可以定义项目的依赖关系,例如引入 Servlet 的依赖关系。 6. 依赖管理 在 Maven 项目中,依赖关系是通过 ...

    Maven的依赖验证项目

    【Maven的依赖验证项目】是一个关于Maven项目管理和依赖管理的实践案例,它与CSDN博主songdeitao的一篇文章《Maven依赖管理详解》相关联。在这个项目中,我们将深入理解Maven如何处理项目的依赖关系,以及如何有效地...

    dubbo项目maven依赖

    1. **依赖版本不匹配**:Dubbo项目依赖于许多其他库,如果本地Maven仓库中的依赖版本与项目中声明的不一致,可能导致编译失败。解决方法是更新Maven的settings.xml文件,或者在pom.xml中指定特定版本。 2. **网络...

    maven web项目配置

    在settings.xml中可以添加或配置多个远程仓库,如中央仓库、公司内部仓库等,以便Maven在找不到本地的依赖时从远程获取。 四、Maven构建生命周期 Maven有三个基本的生命周期阶段:clean、default(或install)、...

    maven_package 依赖包(完整)

    Maven的核心概念之一是项目对象模型(Project Object Model,POM),这是一个XML文件,包含了项目的配置信息,如项目依赖、构建目标、构建过程等。通过POM,Maven能够自动下载所需的依赖库,避免了手动管理jar文件的...

    maven依赖+继承+聚合

    聚合(Aggregation)是指在单个Maven项目中管理多个子项目的能力。在`pom.xml`中定义`modules`标签,可以将多个子项目包含进来。这样,当我们在顶层项目上执行命令时,Maven会递归地构建所有子项目。例如: ```xml ...

    maven多模块项目构建过程

    每个子项目都是独立的Maven项目,可以有自己的pom.xml配置文件,而父项目主要负责定义共有的构建配置和依赖管理。 2. 创建父项目: 首先,我们需要创建一个空的Maven项目,作为父项目的起点。在IDE如IntelliJ IDEA...

    使用Maven构建多模块项目

    Maven构建多模块项目极大地简化了大型项目的管理,通过合理地组织模块间的依赖关系和统一的配置管理,提高了开发效率和代码质量。实践中,需要灵活运用Maven的各种特性,结合最佳实践,以构建高效、稳定的多模块...

    SSM+Maven 项目配置及功能实现

    SSM(Spring、SpringMVC、MyBatis)框架是Java Web...总之,SSM+Maven项目配置涉及多个层次,包括环境搭建、依赖管理、框架配置、业务逻辑实现等。通过理解并熟练掌握这些知识点,可以有效地构建和维护Java Web应用。

    maven多模块项目(简单实例)

    Maven是Java开发中广泛使用的构建工具,它通过一套标准的目录结构和XML配置文件(pom....在"ssm_modules"实例中,我们可以学习到如何根据SSM框架创建和配置多模块项目,这对于提升Java Web开发的效率和质量大有裨益。

    springboot+maven打包demo【将依赖与配置文件打包到jar包外部】

    在本文中,我们将深入探讨如何使用Spring Boot和Maven来构建一个项目,使得依赖和配置文件被打包到jar包外部,以实现更加灵活的项目管理。这个方法对于那些需要根据不同环境进行定制配置或者频繁更新配置的应用来说...

Global site tag (gtag.js) - Google Analytics