你如何使用Maven共享两个项目的源代码?
问题描述:
我有一个使用Maven的大型Java Web应用程序项目,我需要启动一个新的项目,它将共享大部分相同的代码(所以我不必重复工作),但不是全部。我将把共享代码复制到一个新项目中(我们称之为“root”)。如何使我的原始项目依赖于源代码的根?我不能仅仅因为我想在编译之前更改源代码而使用它。你如何使用Maven共享两个项目的源代码?
答
你应该重构你的项目。
- 标识通用代码
- 提取到自己的Maven模块
2.1。通常网络应用程序是多模块的,所以如果你打算在两个网络应用程序之间共享公用库,那么将公用库分成它自己的组编号 - 构建并将jar文件安装到您的存储库中
- 更改网络应用程序的poms取决于您的新库
答
创建一个包含所有共享代码的maven项目。保持这个项目的包装(在主要的pom.xml中)为jar。这将有助于使您的使用这个项目类库。
在所有访问共享代码的项目中,根据您的需要为该项目添加依赖项。 (编译,提供)。
现在打包并安装共享项目,然后再构建任何相关项目。这会将共享项目添加到您的本地存储库,然后您的相关项目可以使用该项目。
为共享项目和相关项目添加示例pom.xml。
共享项目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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>com.myspace.test</artifactId>
<groupId>com.myspace</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.myspace</groupId>
<artifactId>shared</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>shared-module</name>
<description>shared module which contains code shared by other modules.</description>
</project>
依赖项目的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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>com.myspace.test</artifactId>
<groupId>com.myspace</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.myspace</groupId>
<artifactId>dependent-module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>dependent-module</name>
<description>Dependent module.</description>
<dependencies>
<dependency>
<groupId>com.myspace</groupId>
<artifactId>shared</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
如果需要此类组织,可以选择添加父项目。 希望这有助于。
答
安装共享代码,用罐子当前的包装设置:
mvn install
然后,您可以创建在孩子的pom.xml从你是什么仓库的依赖(即不共享的代码)安装到。
这是一个很好的做法,不仅可以避免重复工作,而且还可以在需要更改共享资源的实施时使用。您可以在一个地方更改逻辑,将其安装到存储库,而其他依赖该代码的项目在下次编译时将使用新代码。
适用于我。谢谢。 – teteArg 2014-10-29 22:10:36