Maven Super POM

时间:2009-06-12 13:14:45

标签: maven-2 pom.xml

我是Maven的新手,正在为我的公司创建一个版本。我们不想连接到Maven Central Repository,我们有一个不同于src和测试代码的目录结构,而不是super pom中指定的。我认为处理这个问题的最佳方法是创建一个客户超级pom,但我想知道 - 我在哪里实际放置超级pom所以我的项目poms可以引用它?它是否在某个存储库中存在?如果是这样,在哪里?

谢谢, 杰夫

2 个答案:

答案 0 :(得分: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相混淆。

答案 1 :(得分:3)

你可能是正确的,超级pom是这种情况下的方法。至于你把它放在哪里,你需要创建一个本地maven存储库并让开发人员访问它。以下是一些有用(和免费)的程序:

在运行存储库之后,您需要让每个开发人员修改其settings.xml以引用您已设置的新存储库服务器。您创建的超级pom将部署在存储库中,因此一旦配置为使用它,maven将自动拉下超级pom。

以下是artifactory生成的settings.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <profiles>
    <profile>
      <repositories>
        <repository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>all</name>
          <url>https://server.mycompany.com/artifactory/all</url>
        </repository>
        <repository>
          <snapshots />
          <id>snapshots</id>
          <name>all</name>
          <url>https://server.mycompany.com/artifactory/all</url>
        </repository>
      </repositories>
      <pluginRepositories>
        <pluginRepository>
          <snapshots>
            <enabled>false</enabled>
          </snapshots>
          <id>central</id>
          <name>all</name>
          <url>https://server.mycompany.com/artifactory/all</url>
        </pluginRepository>
        <pluginRepository>
          <snapshots />
          <id>snapshots</id>
          <name>all</name>
          <url>https://server.mycompany.com/artifactory/all</url>
        </pluginRepository>
      </pluginRepositories>
      <id>artifactory</id>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>artifactory</activeProfile>
  </activeProfiles>
</settings>