Maven超级POM

9

我是Maven的新手,正在为公司创建一个构建。我们不想连接到Maven中央仓库,并且我们的src和test代码有不同的目录结构,与超级pom中指定的不同。我认为处理这种情况的最佳方法是创建一个自定义的超级pom,但我想知道 - 我应该把超级pom放在哪里,以便我的项目pom可以引用它?它放在仓库中吗?如果是,放在哪里?

谢谢, Jeff

2个回答

16

我的建议是创建一个父POM,让你的项目可以从中继承您的设置。这个父POM只是另一个Maven 2项目,但类型为“pom”,而不是“jar”。

例如,您可以拥有类似以下这样的父POM:

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.company.projectname</groupId>
    <artifactId>projectname</artifactId>
    <packaging>pom</packaging>
    <version>1.0</version>
    <name>projectname</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.5</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <properties>
        <superprop1>this property is available in all child projects</superprop1>
        <superprop2>this property is available in all child projects</superprop2>
        <superprop3>this property is available in all child projects</superprop3>
    </properties>
</project>

而项目的子元素可能是这样的:

<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>
        <artifactId>projectname</artifactId>
        <groupId>com.company.projectname</groupId>
        <version>1.0</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>        
    <artifactId>child-project</artifactId>
    <packaging>jar</packaging>
    <name>child-project</name>
    <description>
        My child project
    </description>
</project>

在父POM中声明的所有内容现在都可以在子POM中使用。在上面的例子中,子项目将自动拥有JUnit依赖项。以这种方式进行操作还将确保环境相对于如果每个开发人员都必须处理其Maven安装的超级POM而言,是自动配置的。


3
您可能是正确的,在这种情况下,超级pom是可行的解决方案。至于它的放置位置,您需要创建一个本地maven仓库并让开发人员访问它。以下是一些有用(且免费)的程序:
- Artifactory (http://www.jfrog.com/products.php) - Nexus (http://nexus.sonatype.org/) - Archiva (http://archiva.apache.org/)
一旦您建立了一个仓库,您需要让每个开发人员修改他们的settings.xml文件以引用您设置的新仓库服务器。您创建的超级pom将被部署在仓库中,因此一旦他们配置好使用它,maven就会自动拉取超级pom。以下是Artifactory生成的settings.xml文件示例:

  
    
      
        
          
            false
          
          central
          all
          https://server.mycompany.com/artifactory/all
        
        
          
          snapshots
          all
          https://server.mycompany.com/artifactory/all
        
      
      
        
          
            false
          
          central
          all
          https://server.mycompany.com/artifactory/all
        
        
          
          snapshots
          all
          https://server.mycompany.com/artifactory/all
        
      
      artifactory
    
  
  
    artifactory
  

这是一个Maven的配置文件,其中定义了两个仓库(repository)和两个插件仓库(pluginRepository),以及一个名为artifactory的profile。每个仓库定义了id、name、url等属性,其中snapshots节点指定是否启用快照版本。在activeProfiles节点中指定了生效的profile为artifactory。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接