Maven 2 如何使用Maven共享两个项目的源代码?

Maven 2 如何使用Maven共享两个项目的源代码?,maven-2,Maven 2,我有一个使用Maven的大型Java Web应用程序项目,我需要启动一个新项目,该项目将共享大部分相同的代码(因此我不必重复工作),但不是全部。我将把共享代码复制到一个新项目中(我们称之为“根”)。我如何使我的原始项目依赖于root来获取源代码?我不能只是jar它,因为我想在编译之前更改源代码。创建一个包含所有共享代码的maven项目。将此项目的打包(在主pom.xml中)保持为jar。这将有助于使该项目成为供您使用的库 在所有访问共享代码的项目中,根据需要为该项目添加依赖项。(编译,提供) 现

我有一个使用Maven的大型Java Web应用程序项目,我需要启动一个新项目,该项目将共享大部分相同的代码(因此我不必重复工作),但不是全部。我将把共享代码复制到一个新项目中(我们称之为“根”)。我如何使我的原始项目依赖于root来获取源代码?我不能只是jar它,因为我想在编译之前更改源代码。

创建一个包含所有共享代码的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>

4.0.0  
com.myspace.test
com.myspace
0.0.1-快照
com.myspace
共享
0.0.1-快照
共享模块
共享模块,其中包含由其他模块共享的代码。
从属项目的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>

4.0.0  
com.myspace.test
com.myspace
0.0.1-快照
com.myspace
从属模块
0.0.1-快照
从属模块
依赖模块。
com.myspace
共享
0.0.1-快照
假如
如果需要这样的组织,可以选择添加父项目。
希望这有帮助。

使用当前的jar打包设置安装共享代码:

mvn install
然后,您可以从要安装到的任何存储库在子pom.xml(不共享的代码)中创建依赖项


这通常是一种良好的做法,不仅可以避免重复工作,而且还可以在您想要更改共享资源的实现时使用。您可以在一个地方更改逻辑,将其安装到存储库中,其他依赖该代码的项目将在下次编译时使用新代码。

您应该重构项目

  • 识别通用代码
  • 将其提取到自己的maven模块中
    2.1. 通常web应用程序是多模块的,因此,如果要在两个web应用程序之间共享公共库,请将公共库分离到其自己的组id中
  • 构建jar文件并将其安装到存储库中
  • 更改web应用程序的POM以取决于您的新库

  • 对我有用。谢谢