2013-01-18 119 views
4

我是Maven的新手,最近安装了nexus。现在我想创建一个父POM,这样我公司内的所有项目都可以使用它。这是我的父母POM。Maven Parent POM

<?xml version="1.0" encoding="UTF-8"?> 
<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>1.0.0</modelVersion> 
    <groupId>com.mycomp</groupId> 
    <artifactId>parent-pom-android</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>apk</packaging> 
    <name>Android Parent POM</name> 

    <repositories> 
     <repository> 
      <id>nexus-repo</id> 
      <url>http://10.10.10.230:8081/nexus/content/groups/public</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
       <updatePolicy>always</updatePolicy> 
      </snapshots> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>nexus-repo</id> 
      <name>confiz-repo</name> 
      <url>http://10.10.10.230:8081/nexus/content/groups/public/</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 
</project> 

现在在哪儿,我把这个POM文件,这样我的其他POM文件可以从它继承?

回答

3

你有你的项目部署到内部Maven仓库开始。要做到这一点,首先需要配置一个Maven仓库服务器(我推荐使用Apache Archiva),然后将你的pom.xml和settings.xml指向服务器:http://archiva.apache.org/docs/1.4-M3/userguide/deploy.html

部署它之后,可以指向所有项目从你的公司使用那个pom作为父母。您可以使用相同的策略来创建内部项目依赖关系。这在continuous integration环境中非常好。

+0

我已经安装了nexus并将parent-pom.xml上传到了nexus。我怎样才能指出我的项目pom从nexus repo中读取pom? – AndroidDev

+1

您需要配置您的pom.xml和settings.xml以使用该存储库。一些信息在这里:https://support.sonatype.com/entries/21283268-configure-a-maven-build-to-publish-to-nexus –

+0

听起来像鸡或鸡蛋问题给我。父pom定义自定义存储库,但客户端必须从存储库获取父pom。 – Robert

10

如果你把这个父pom放在一个名为android的文件夹中,并且会在这个文件夹中使用它。

  • 的Android
  • 的pom.xml
  • 机器人项目-1
    • 的pom.xml

该项目的pom.xml然后可以通过将使用父POM这在其pom.xml的顶部:

<parent> 
    <groupId>parent.group</groupId> 
    <artifactId>parent.artifact</artifactId> 
    <version>${version.number}</version> 
    <relativePath>../</relativePath> 
</parent> 

然后,您可以在将来扩展这个结构是这样的:

  • 移动
    • 的pom.xml
    • 的Android
      • 的pom.xml
      • Android的项目1
      • android-project-2
    • iPhone
      • 的pom.xml
      • iphone项目-1

这让你定义常见的配置为Android项目,iphone项目和常见的配置常见的配置所有移动项目。等等

1

对于每个孩子pom,放置一个对父pom的引用。

<parent> 
    <groupId>com.mycomp</groupId> 
    <artifactId>parent-pom-android</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <relativePath>relative/path/to/parent/pom</relativePath> 
</parent> 

relativePath计算从孩子POM

+0

如果父pom位于Nexus中,并且settings.xml配置为使用内部的Nexus,则不需要相对路径。当你在版本控制中有几个项目存储在一起并且有一个父POM他们都使用时,相对路径很有用。然后,父pom不在Nexus中,而是在与该组项目的版本控制中。 –

1

包装类型应该是pom而不是apk