相关疑难解决方法(0)

Maven父母pom vs模块pom

在多项目构建中似乎有几种方法来构建父pom,我想知道是否有人对每种方式的优点/缺点有任何想法.

拥有父pom的最简单方法是将它放在项目的根目录中,即

myproject/
  myproject-core/
  myproject-api/
  myproject-app/
  pom.xml
Run Code Online (Sandbox Code Playgroud)

其中pom.xml既是父项目又是-core -api和-app模块

下一个方法是将父项分离到它自己的子目录中,如中所示

myproject/
  mypoject-parent/
    pom.xml
  myproject-core/
  myproject-api/
  myproject-app/
Run Code Online (Sandbox Code Playgroud)

父pom仍然包含模块,但它们是相对的,例如../myproject-core

最后,有一个选项,模块定义和父项分开,如

myproject/
  mypoject-parent/
    pom.xml
  myproject-core/
  myproject-api/
  myproject-app/
  pom.xml
Run Code Online (Sandbox Code Playgroud)

父pom包含任何"共享"配置(dependencyManagement,属性等),myproject/pom.xml包含模块列表.

目的是可扩展到大规模构建,因此应该可以扩展到大量项目和工件.

一些奖金问题:

  • 在源代码控制,部署目录,常见插件等中定义各种共享配置的最佳位置在哪里(我假设父母,但我经常被这种情况所困扰,他们最终在每个项目中而不是常见的一个).
  • maven-release插件,hudson和nexus如何处理你如何设置你的多项目(可能是一个巨大的问题,如果有人因为如何设置多项目构建而被抓住了,那就更多了?)

编辑:每个子项目都有自己的pom.xml,我把它留了下来以保持简洁.

java build-process maven-2

279
推荐指数
4
解决办法
15万
查看次数

什么是Maven的"反应堆"?

我一直在阅读有关Maven反应堆的内容,并对其术语用法感到困惑.我读过一个多模块是一个反应堆,你可以操纵maven反应堆,反应堆是一个插件.究竟什么是反应堆?

maven-2 maven maven-reactor

98
推荐指数
2
解决办法
4万
查看次数

如何在多模块项目中处理maven版本?

我有一个像这样的maven项目基础设施:

/trunk/all/pom.xml
/trunk/all/libs/lib1/pom.xml
               /lib2/pom.xml
               ...
/trunk/all/projects/p1/pom.xml
                   /p2/pom.xml
                   ...
Run Code Online (Sandbox Code Playgroud)

你看,我有很多库和许多使用这些库的项目.

所有这些都结合到一个多模块项目中,因为我喜欢

  • 将顶级项目导入eclipse并立即提供所有库和项目
  • mvn test在完成一些全局重构之后,只做一个单独的编译和测试我的所有代码.

目前,我的所有模块都是版本1.0-SNAPSHOT.

现在我想发布项目,p2并且所有库都p2使用(例如lib1lib2)版本1.0.从那以后,我做了一些修改代码lib1,但没有lib2.

我希望下一个版本p2是版本1.1,lib1在版本中使用1.1(它自上一版本以来已被修改),但lib2仍然在版本中1.0(因为它没有被修改).

更一般:如果我发布了一个版本,我想增加自上次发布以来发布项目的次要编号以及所有已更改的库.

我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?

maven-2 maven-release-plugin

6
推荐指数
1
解决办法
4177
查看次数

从一个不寻常的svn目录结构迁移到maven?

与'普通'svn目录结构相反,我使用以下结构:

trunk/
  project1/
  project2/
  project3/
  ...
branches/
  project1-branch/
    project1/
    project2/
    ...
  project2-branch/
    project1/
    project2/
    ...
tags/
  project1/
    V1
    V2
    ...

如您所见,我没有为每个项目单独的三元组(主干/分支/标签).

对于开发,我会检查包含我需要的所有项目的主干(有时是稀疏结账)(项目之间存在依赖关系,而某些项目只是库).

我在这里看到的好处是:

  • 更新和签入很简单,因为我有一个所有项目的公共根目录(主干).一个简单svn updatesvn commit全部.

  • 创建标签或分支很简单,因为它只是我必须拥有的主干svn copy.(分支和标签实际上包含的项目比需要的多,但是它svn copy很便宜,如果需要,我仍然可以在分支或标签上进行稀疏检查.)

  • 将资源从一个项目移动到另一个项目很容易,因为它们都存在于同一个存储库中.

  • 当我正在完全检查主干时,全局重构(例如更改常用类的包)很容易,因为我可以确定我不会错过任何项目.

  • 合并很容易,因为即使从一个项目到另一个项目的重构移动,我总是可以立即合并整个分支.


我打算迁移到maven并将所有项目从trunk转移到maven项目.我想从maven依赖管理和可用的插件中受益(现在我正在使用巨大的自定义ant文件).

现在我的问题是:

  • 我是否必须更改svn目录结构以为每个项目提供自己的三元组(主干/分支/标签)?我猜答案是'是'.

  • 如果我改变结构,我会松开上面提到的哪些好处(我的意思是用maven做什么会更复杂)?

  • 用maven做同样的方法是什么?

java svn refactoring maven-2 release-management

4
推荐指数
1
解决办法
3933
查看次数