Maven 多模块项目依赖管理

作者:範宗雲 来源:原创 发布时间:2015-04-19 归档:maven

环境 : JDK 7 Maven 3 Tomcat 7 Eclipse Luna
Maven 多模块项目 一文, 下面介绍在多模块项目中, 如何管理项目的依赖。
dependencyManagement
		    <project>
		      [. . .]
			  <artifactId>kitty-parent</artifactId>
			  <modules>
			    <module>kitty-app</module>
			    <module>kitty-core</module>
			  </modules>
			  <dependencyManagement>
			    <dependencies>
			      <dependency>
			        <groupId>junit</groupId>
			        <artifactId>junit</artifactId>
			        <version>${junit.version}</version>
			        <scope>test</scope>
			      </dependency>
			      <dependency>
			        <groupId>javax.servlet</groupId>
			        <artifactId>servlet-api</artifactId>
			        <version>${servlet.version}</version>
			        <scope>provided</scope>
			      </dependency>
			    </dependencies>
			  </dependencyManagement>
		      [. . .]
			</project>
		    
这是父模块 kitty-parent 的配置片段, 以上声明依赖的方式与以往稍有不同, 上面用了 <dependencyManagement> 节点, 这样配置完成之后, 实质上, 子模块不会引入任何的构件依赖, 这样做只是为了让子模块能够继承得到这些配置, 这样做的好处是, 在子模块中只需要声明 groupId 和 artifactId 就能准确无误的获取得到依赖的构件。可以想象的到, 这样一来, 不仅能够使子模块配置依赖变得简单, 还能使项目范围内所有依赖的构件的版本能够得到统一, 而且还能在父模块中统一的来管理, 这样就不会发生在多个子模块项目中使用构件的版本不一致的问题。
pluginManagement
		    <project>
		      [. . .]
			  <artifactId>kitty-parent</artifactId>
			  <modules>
			    <module>kitty-app</module>
			    <module>kitty-core</module>
			  </modules>
			  <build>
			    <pluginManagement>
			      <plugins>
			        <plugin>
			          <groupId>org.apache.maven.plugins</groupId>
			          <artifactId>maven-compiler-plugin</artifactId>
			          <version>${compiler.version}</version>
			          <configuration>
			            <source>${jdk.version}</source>
			            <target>${jdk.version}</target>
			          </configuration>
			        </plugin>
			        <plugin>
			          <groupId>org.apache.maven.plugins</groupId>
			          <artifactId>maven-surefire-plugin</artifactId>
			          <version>${surefire.version}</version>
			          <configuration>
			            <skipTests>true</skipTests>
			          </configuration>
			        </plugin>
			      </plugins>
			    </pluginManagement>
			  </build>
		      [. . .]
			</project>
		    
pluginManagement 用于插件的管理, 作用与 dependencyManagement 雷同, 这里不再赘述。
kitty-core pom
		    <project>
			  <parent>
			    <groupId>org.lychie</groupId>
			    <artifactId>kitty-parent</artifactId>
			    <version>1.0.0</version>
			  </parent>
			  <artifactId>kitty-core</artifactId>
			  <dependencies>
			    <dependency>
			      <groupId>junit</groupId>
			      <artifactId>junit</artifactId>
			    </dependency>
			  </dependencies>
			  <build>
			    <plugins>
			      <plugin>
			        <groupId>org.apache.maven.plugins</groupId>
			        <artifactId>maven-surefire-plugin</artifactId>
			      </plugin>
			    </plugins>
			  </build>
			</project>
			
这是子模块项目 kitty-core 的配置片段, 可以看到, 它在使用依赖和插件时, 都只需要声明 groupId 和 artifactId。

示例代码下载
multi-modules.zip