你如何使用Maven分享两个项目的源代码?

时间:2010-08-02 17:47:36

标签: maven-2

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

3 个答案:

答案 0 :(得分:9)

你应该重构你的项目。

  1. 识别公共代码
  2. 将其提取到自己的maven模块中 2.1。通常,网络应用程序是多模块的,因此如果您要跨两个网络应用程序共享公共库,则将公共库分离为自己的组ID
  3. 构建jar文件并将其安装到存储库中
  4. 更改网络应用的poms以取决于您的新图书馆

答案 1 :(得分: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>

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

答案 2 :(得分:0)

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

mvn install

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

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