我们目前正在评估为我们的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有一天会改变,这将是一项繁琐的工作吗?
我对这整件事情感到很困惑,尽管我试图阅读很多内容。
提前谢谢!
感谢下面Michael-O的答案,我得到了我需要的信息。
<repositories>
和<pluginRepositories>
标记属于
settings.xml
。这是指定nexus存储库的地方
&#34;正在下载&#34; (可选择包含使用<servers>
的凭据<distributionManagement>
属于公司基础pom,
为版本和快照引用基本的Nexus存储库。这是指定&#34;上传&#34; (部署)的nexus存储库的地方。如果需要子存储库(用于逻辑分组项目),则在项目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>
企业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中。
答案 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。