我有一个使用Maven的大型Java Web应用程序项目,我需要启动一个新项目,它将共享大部分相同的代码(所以我不必重复工作),但不是全部。我要将共享代码复制到一个新项目中(让我们称之为“root”)。如何让我的原始项目依赖root来获取源代码?我不能只是因为我想在编译之前更改源代码,所以我不能把它作为jar。
答案 0 :(得分:9)
你应该重构你的项目。
答案 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(未共享的代码)中创建依赖项。
这通常是一种很好的做法,不仅可以避免重复工作,还可以防止您想要更改共享资源的实现。您可以在一个位置更改逻辑,将其安装到存储库,依赖该代码的其他项目将在下次编译时使用新代码。