2011-06-06 94 views
0

我有几个Maven项目,它们从父pom.xml中共享一些常用的设置 - 存储库,插件和通用依赖项。如何管理不在同一目录结构中的maven子项目?

我想现在移动子项目来分离svn位置,以便他们可以拥有自己的生命周期,标签,分支和树干。但是如果我从目录结构中移动子项目,我将不得不重写所有项目中的整个公共pom.xml。

是否有更好的方式来处理这个问题,以便子项目仍然可以共享一个共同的父pom.xml,而不会彼此相邻(作为文件夹)。

回答

1

我不知道为什么你必须显式引用父pom文件。

我最常做的是有父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> 
    <groupId>com.blah.commons</groupId> 
    <artifactId>project-standards</artifactId> 
    <name>Common Standards</name> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
... 

注意<packaging>pom</packaging>元素

而且每个项目/模块中,将取决于标准的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"> 

    <parent> 
     <groupId>com.blah.commons</groupId> 
     <artifactId>project-standards</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.blah.project</groupId> 
    <artifactId>xyz-core</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>project xyz core module</name> 
... 

注意<parent>元素。

4

我假设你已经定义了一个父pom.xml的是这样的:

<parent> 
    <groupId>my.group</groupId> 
    <artifactId>name</artifactId> 
    <version>0.1.3-SNAPSHOT</version> 
    <relativePath>../pom.xml</relativePath> 
</parent> 

只需删除元素<relativePath/>,则父像所有其他依赖访问,无论是从本地资源库或您自己的Nexus库。因此,相对路径不是必需的,这不依赖于目录结构。

+0

+1这就是答案。请记住,您需要为父项目提供自己的'mvn deploy'作业,以便将其安装到您的存储库中,而不会自行获取它们。 – 2011-06-06 18:56:31

+0

啊是的,这应该工作。但是,如果我检查我的本地存储库(artifactory)中的父pom。我将不得不在所有子项目中添加仓库设置(本地仓库)。任何方式,我可以避免这样做? – sheki 2011-06-07 04:57:36

+1

@Sheki我从来没有使用过artifactory,但是如果它是你的**本地**版本库,应该自动找到这个artifact?如果没有,可以在你的'.m2/settings.xml'中配置。 – Thor 2011-06-07 10:00:37