Nexus& Maven Corporate Pom - 它应包含哪些内容?

时间:2015-11-04 12:47:04

标签: java maven pom.xml nexus corporate

我们目前正在评估为我们的Java开发建立内部公司nexus存储库。

不幸的是,仍有一些问题没有答案,但也许你可以提供帮助。

公司内所有项目的父母pom似乎是最佳做法。除了<organization>部分之外,还不清楚这个pom应该包含什么。

最佳做法是在此pom中指定<distributionManagement>吗?如果是,它应该包含什么以及如果我们想要引用公司nexus(<site><repository><snapshotRepository>)应该是什么样的?

如何处理(根据sonatype)最佳实践,每个项目都有自己的存储库,而不需要在每个pom中指定nexus根路径?

我们是否应该在那里指定<repositories><pluginRepositories>部分(引用我们的内部关系)?

此外,我们希望基本上每个项目都可以部署它自己的网站,我们是否也可以在父pom中指定它?如果是,网站插件配置应该是什么样的?

如果有人可以提供可以与内部nexus存储库一起使用的完整的示例性公司pom,那将是最好的。

或者将这些内容放在settings.xml中以便不将项目绑定到某个存储库更好?但据我所知,<distributionManagement>无法在settings.xml中指定?如果nexus url有一天会改变,这将是一项繁琐的工作吗?

我对这整件事情感到很困惑,尽管我试图阅读很多内容。

提前谢谢!

UPDATE /解决方案

感谢下面Michael-O的答案,我得到了我需要的信息。

  1. <repositories><pluginRepositories>标记属于 settings.xml。这是指定nexus存储库的地方 &#34;正在下载&#34; (可选择包含使用<servers>的凭据
  2. <distributionManagement>属于公司基础pom, 为版本和快照引用基本的Nexus存储库。这是指定&#34;上传&#34; (部署)的nexus存储库的地方。
  3. 如果需要子存储库(用于逻辑分组项目),则在项目pom.xml内指定它们,因此覆盖公司pom内的子存储库。为了简化这一过程并将基本关联URL仅保留在公司pom中(注意URL更改),可能有用/可能以下列方式在<distributionManagement>内指定存储库:

    <repository>
      <id>company-repository</id>
      <name>Internal Releases</name>
      <url>http://my.nexus.repo/releases/${subRepositoryId}-releases</url>
    </repository>
    
  4. 可在this post

  5. 中找到示范企业pom
  6. 要防止在pom文件或设置中更改配置,可以使用nexus url的别名。虽然这意味着行政方面的额外努力。
  7. 如果需要项目的站点,则不能使用公司pom内的一般定义,必须为每个项目pom单独声明。为了简化此过程,站点nexus url可以存储在公司pom的属性中,然后可以在项目poms的站点分发管理中引用。
  8. 企业pom可能包含类似的内容:

      <project>
        ....
        <properties>
          <repository.group>common</repository.group>
          <repository.url.base>http://my.nexus:port/nexus/content</repository.url.base>
          <repository.url.repositories>${repository.url.base}/repositories</repository.url.repositories>
          <repository.url.sites>${repository.url.base}/sites</repository.url.sites>
        </properties>
    
        <distributionManagement>
          <repository>
            <id>company-repository</id>
            <name>Internal Releases</name>
            <url>${repository.url.repositories}/${repository.group}-releases</url>
          </repository>
          <snapshotRepository>
            <id>company-repository</id>
            <name>Internal Snapshots</name>
            <url>${repository.url.repositories}/${repository.group}-snapshots</url>
          </snapshotRepository>
        </distributionManagement>
        ....
      </project>
    

    该项目与此类似:

      <project>
        ...
        <properties>
          <repository.group>project-group</repository.group>
        </properties>
    
        <distributionManagement>
          <site>
            <id>company-repository</id>
            <name>Internal Releases</name>
            <url>dav:${repository.url.sites}/project-site</url>
          </site>
        </distributionManagement>
        ...
      </project>
    

    警告:有人可能想知道为什么不直接将网站部分包含在公司pom中。这是不可能的,因为您无法将多个站点部署到同一站点存储库而不会造成混乱。使用上面的方法,不需要为每个项目创建一个存储库,但是能够将它们逻辑地组合成更大的组,或者将它们留在common-releases / snapshots组/ repository中。

1 个答案:

答案 0 :(得分:3)

您可以查看Apache Parent POM或Maven Parent 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.example</groupId>
  <artifactId>example-parent</artifactId>
  <version>1-SNAPSHOT</version>
  <packaging>pom</packaging>

  <name>Exmaple Parent POM</name>
  <organization>
    <name>Example Inc.</name>
  </organization>

  <!-- This marked as deprecated for Maven 3.x. This is checked by maven-enforcer-plugin -->
  <!-- http://jira.codehaus.org/browse/MNG-5297 -->
  <prerequisites>
    <maven>${maven.version}</maven>
  </prerequisites>

  <scm>
    <connection>scm:svn:https://example.com/repos/svn/ExmapleJava/example-parent/trunk/</connection>
    <developerConnection>scm:svn:https://example.com/repos/svn/ExmapleJava/example-parent/trunk/</developerConnection>
    <url>https://example.com/repos/websvn/browse/ExmapleJava/example-parent/trunk/</url>
  </scm>

  <distributionManagement>
    <repository>
      <id>nexus-example</id>
      <name>Nexus Exmaple Release Repository</name>
      <url>https://example.com/nexus/content/repositories/example-releases</url>
    </repository>
    <snapshotRepository>
      <id>nexus-example</id>
      <name>Nexus Exmaple Snapshot Repository</name>
      <url>https://example.com/nexus/content/repositories/example-snapshots</url>
    </snapshotRepository>
  </distributionManagement>

  <properties>
    <maven.version>3.2</maven.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <surefire.version>2.19</surefire.version>
    <javadoc.version>2.10.3</javadoc.version>
  </properties>

  <build>
    <pluginManagement>
      <plugins>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.3</version>
        </plugin>
        <plugin>
          <artifactId>maven-source-plugin</artifactId>
          <version>2.4</version>
          <configuration>
            <excludeResources>true</excludeResources>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.6</version>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <version>2.6</version>
        </plugin>
        <plugin>
          <artifactId>maven-release-plugin</artifactId>
          <version>2.5.3</version>
          <configuration>
            <mavenExecutorId>forked-path</mavenExecutorId>
            <autoVersionSubmodules>true</autoVersionSubmodules>
            <useReleaseProfile>false</useReleaseProfile>
            <tagNameFormat>@{project.version}</tagNameFormat>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-help-plugin</artifactId>
          <version>2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-javadoc-plugin</artifactId>
          <version>${javadoc.version}</version>
          <configuration>
            <quiet>true</quiet>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>2.7</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>${surefire.version}</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>2.6</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.10</version>
        </plugin>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>2.6.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-site-plugin</artifactId>
          <version>3.4</version>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>buildnumber-maven-plugin</artifactId>
          <version>1.4</version>
          <configuration>
            <buildNumberPropertyName>buildRevision</buildNumberPropertyName>
            <timestampPropertyName>buildTimestamp</timestampPropertyName>
            <scmBranchPropertyName>buildScmBranch</scmBranchPropertyName>
            <revisionOnScmFailure>non-SCM</revisionOnScmFailure>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>versions-maven-plugin</artifactId>
          <version>2.2</version>
          <configuration>
            <generateBackupPoms>false</generateBackupPoms>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>appassembler-maven-plugin</artifactId>
          <version>1.10</version>
          <configuration>
            <includeConfigurationDirectoryInClasspath>false</includeConfigurationDirectoryInClasspath>
          </configuration>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>1.9.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-enforcer-plugin</artifactId>
          <version>1.4.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.8</version>
        </plugin>
      </plugins>
    </pluginManagement>
    <plugins>
      <plugin>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-maven</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireMavenVersion>
                  <version>${maven.version}</version>
                  <message>This project requires at least Maven ${maven.version}</message>
                </requireMavenVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>example-release</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-sources</id>
                <goals>
                  <goal>jar-no-fork</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
              <execution>
                <id>attach-javadocs</id>
                <goals>
                  <goal>jar</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>

当然,插件应该因公司而异,但这可以帮助您入门。这实际上是我们的父母刚刚删除了我们的本地信息。

网站部署没有信息,因为我们不使用它。如果你使用它,请设置它。

时,您的POM应包含<repositories><pluginRepositories>,因为这是不好的做法。理想情况下,您使用Nexus中的repo组镜像(settings.xml)所有请求。

继承并快乐。

如何处理网站: 通常,每个项目都有自己的站点,应该在dist mngt部分覆盖。这与工件不同。无论您是在Nexus上托管还是在Apache等网络服务器上托管都取决于您。最重要的是,每个项目站点都需要其不同的URL。