小编mgl*_*che的帖子

我们应该使用Nexus或Artifactory进行Maven回购吗?

我们正在使用Maven进行大型构建过程(> 100个模块).我们一直将外部依赖项存储在源代码控制中,并使用它来更新本地仓库.

但是,我们已准备好升级到可以缓存中心的本地仓库,这样我们就不必主动下载所有第三方(但我们仍然可以从本地仓库中获取).此外,我们希望从每晚构建中发布我们的内部构建工件,以便开发人员不必构建世界.

我们正在考虑Nexus和Artifactory.优先选择其中一个的原因是什么?我们应该考虑其他人吗?

maven-2 nexus artifactory

117
推荐指数
8
解决办法
9万
查看次数

如何指定maven的分布管理组织?

我正在试图弄清楚如何组织许多(大约50多个)maven2项目,以便他们可以部署到一个中央nexus存储库.在使用mvn deploy目标时,需要在distributionManagement标记中指定目标,如下所示:

<distributionManagement>
   <repository>
      <id>nexus-site</id>
        <url>http://central_nexus/server</url>
   </repository>
</distributionManagement>
Run Code Online (Sandbox Code Playgroud)

现在,我不希望每个pom.xml(50+以上)一遍又一遍地包含这个块.我的第一个虽然是settings.xml文件,但似乎不可能(按设计)在那里定义它.那么,第一个问题是,为什么会这样呢?如果有可能我可以在maven2发行版的settings.xml中指定它,它可以分发给所有开发人员.

我发现唯一可行的解​​决方案是创建一个组织范围的master-pom项目,它确实包含这些设置,并使所有其他pom.xml依赖于这个master-pom via <parent>标签.但这在多模块构建中看起来很奇怪:

- master configuration POM (pm)
- Project 1 parent pom (p1 with module 1 and module 2 as modules)
    - Project 1 module pom (with pm as parent)
    - Project 2 module pom (with pm as parent)
Run Code Online (Sandbox Code Playgroud)

通常我在所有文档中都读到模块poms应该使用父pom,而不是一些不同的pom.但在阅读了关于继承诉聚合的maven网站之后,我们写道它确实是可能的.

我发现的一个问题是maven网站生成,这似乎有这个设置的问题(模块如果没有直接的反向引用就无法正确链接)

那么,这是一种有效的方法吗?问题的任何其他更明显,更简单的解决方案?

java deployment maven-2 nexus maven

105
推荐指数
3
解决办法
10万
查看次数

你如何有效地处理maven-3时间戳快照?

现在maven-3确实放弃了对<uniqueVersion> false </ uniqueVersion>的快照伪像的支持,似乎你真的需要使用带时间戳的SNAPSHOTS.特别是在内部使用maven 3的m2eclipse似乎受其影响,当SNAPSHOTS不是唯一时,更新快照不起作用.

以前将最佳快照设置为uniqueVersion = false 似乎是最佳做法

现在,切换到带时间戳的版本似乎没什么大问题,毕竟它们是由中央nexus存储库管理的,它可以在常规的intervalls中删除旧的快照.

问题是本地开发人员工作站.他们的本地存储库通过独特的快照很快变得非常大.

如何处理这个问题?

现在我看到了以下可能的解决方案:

  • 要求开发人员定期清除存储库(这导致很多因为需要很长时间才能删除,甚至更长时间才能下载所需的所有内容)
  • 设置一些脚本,它会从本地存储库中删除所有SNAPSHOT目录,并要求开发人员不时运行该脚本(比第一个更好,但仍需要相当长的时间来运行和下载当前快照)
  • 使用依赖:purge-local-repository插件(从eclipse运行时有问题,由于打开文件,需要从每个项目运行)
  • 在每个工作站上设置nexus并设置一个工作来清理旧快照(最好的结果,但我不想维护50多个nexus服务器,而且开发人员工作站上的内存总是很紧张)
  • 完全停止使用SNAPSHOTS

保持本地存储库填满硬盘空间的最佳方法是什么?

更新:

为了验证beaviour并提供更多信息,我设置了一个小的nexus服务器,构建两个项目(a和b)并尝试:

A:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.glauche</groupId>
  <artifactId>a</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots</url>
    </snapshotRepository>
  </distributionManagement>

</project>
Run Code Online (Sandbox Code Playgroud)

b:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>de.glauche</groupId>
  <artifactId>b</artifactId>
  <version>0.0.1-SNAPSHOT</version>
    <distributionManagement>
    <snapshotRepository>
        <id>nexus</id>
        <name>nexus</name>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </snapshotRepository>
  </distributionManagement>
 <repositories>
    <repository>
        <id>nexus</id>
        <name>nexus</name>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
        <url>http://server:8081/nexus/content/repositories/snapshots/</url>
    </repository>
 </repositories>
  <dependencies>
    <dependency>
        <groupId>de.glauche</groupId>
        <artifactId>a</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency> …
Run Code Online (Sandbox Code Playgroud)

java maven-3

82
推荐指数
3
解决办法
6万
查看次数

如何将CVS与maven-release-plugin一起使用?

我很难让maven-release-plugin与我们的CVS存储库一起工作.希望我遗漏了一些明显的东西,或者再也没有人使用CVS/pserver和Maven2/3了?

第一个问题是scm URL:

maven CVS提供程序声明有效的scm URL如下所示:

scm:cvs<delimiter>pserver<delimiter>[username[<delimiter>password]@]servername[<delimiter>port]<delimiter>path_to_repository<delimiter>module_name
Run Code Online (Sandbox Code Playgroud)

所以,我正在努力

<scm>
    <connection>scm:cvs:pserver:cvssserver:/home/cvs/repository/projecta:ejbprojectA</connection>
</scm>
Run Code Online (Sandbox Code Playgroud)

这应该是一个有效的cvs scm url.对于release-plugin,我将直接在relase插件配置中将用户名设置在本地settings.xml中.发布插件可以正常工作,但这会导致构建maven站点时出错:

[INFO] Username isn't defined.
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.IllegalArgumentException: Username isn't defined.
        at org.apache.maven.scm.provider.cvslib.repository.CvsScmProviderRepository.getCvsRootForCvsPass(CvsScmProviderRepository.java:113)
Run Code Online (Sandbox Code Playgroud)

这似乎是scm插件中的一个三岁的bug:http://jira.codehaus.org/browse/SCM-350

添加用户名变量以满足网站插件也不起作用,因为这会触发maven-release-plugin中的另一个(4岁)错误:http://jira.codehaus.org/browse/MRELEASE-128

如果我使用固定的用户名,我可以得到它以某种方式工作,但这不是真的令人满意.

第二个问题是平面项目结构,maven发布插件似乎无法与它们一起使用CVS,似乎有一些SVN的修复,但这些更改完全打破了平坦的cvs结构(项目模块旁边的主pom模块)

所以,最大的问题是,是否有其他人使用带有cvs的maven-release-plugin?你的设置如何?你是如何处理这些问题的?你是否使用平面项目结构(在eclipse中使用它更方便......)?

java cvs build-process maven-2

5
推荐指数
1
解决办法
2932
查看次数

网络中断后如何强制m2eclipse寻找新的依赖?

我们正在使用m2eclipse 0.12.1和nexus oss 1.9.0.1存储库.今天,在nexus服务器停机期间,一些用户确实在m2eclipse中使用了"更新依赖项",这确实导致项目配置损坏(几乎所有依赖项都找不到工件)

问题是,在nexus服务器恢复联机后,更新依赖仍然无效,似乎没有尝试到达服务器.唯一有效的蛮力溶解是删除本地存储库.然后成功下载了所有依赖项.

因此,似乎本地元数据已损坏,或者告诉m2eclipse不要再次查看服务器.如何强制m2eclipse下载依赖项?或者如何告诉m2eclipse再次启用nexus服务器?

java m2eclipse maven-3

2
推荐指数
1
解决办法
3271
查看次数