【问题标题】:How do you use Maven to share source code for two projects?如何使用 Maven 共享两个项目的源代码?
【发布时间】:2010-08-02 17:47:35
【问题描述】:

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

【问题讨论】:

    标签: maven-2


    【解决方案1】:

    你应该重构你的项目。

    1. 识别通用代码
    2. 将其提取到自己的 Maven 模块中
      2.1.通常 web-apps 是多模块的,所以如果你要在两个 web-apps 之间共享公共库,那么将公共库分离到它自己的 group-id 中
    3. 构建 jar 文件并将其安装到您的存储库中
    4. 将网络应用的 pom 更改为依赖于您的新库

    【讨论】:

    • 为我工作。谢谢。
    【解决方案2】:

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

    如果需要这样的组织,可以选择添加父项目。 希望这会有所帮助。

    【讨论】:

      【解决方案3】:

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

      mvn install
      

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-05
        • 1970-01-01
        • 2023-03-29
        • 2021-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多