【发布时间】:2010-08-02 17:47:35
【问题描述】:
我有一个使用 Maven 的大型 Java Web 应用程序项目,我需要启动一个新项目,该项目将共享大部分相同的代码(因此我不必重复工作),但不是全部。我要将共享代码复制到一个新项目中(我们称之为“根”)。如何使我的原始项目依赖于 root 的源代码?我不能只是 jar 它,因为我想在编译之前更改源代码。
【问题讨论】:
标签: maven-2
我有一个使用 Maven 的大型 Java Web 应用程序项目,我需要启动一个新项目,该项目将共享大部分相同的代码(因此我不必重复工作),但不是全部。我要将共享代码复制到一个新项目中(我们称之为“根”)。如何使我的原始项目依赖于 root 的源代码?我不能只是 jar 它,因为我想在编译之前更改源代码。
【问题讨论】:
标签: maven-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>
如果需要这样的组织,可以选择添加父项目。 希望这会有所帮助。
【讨论】:
使用您当前的 jar 打包设置安装共享代码:
mvn install
然后,您可以在要安装到的任何存储库中的子 pom.xml(未共享的代码)中创建依赖项。
一般来说,这是一种很好的做法,不仅可以避免重复工作,而且还可以在您想更改共享资源的实现时使用。您可以在一处更改逻辑,将其安装到存储库中,其他依赖该代码的项目将在下次编译时使用新代码。
【讨论】: