我目前有大约16个项目,我使用maven构建,部署到同一个应用程序服务器,构成类似"门户"的东西.我已经构建了一个父pom来处理常见的依赖项和插件配置.目前,我的SVN结构看起来与此类似:
portal_root
+project1
+tags
+branches
+trunk
+project2
.
.
.
+projectn
pom.xml
Run Code Online (Sandbox Code Playgroud)
各个项目均单独部署.也就是说,project1没有对project2的依赖,每个都可以修改和部署,而无需修改任何其他内容.
这给SVN带来了一个问题,好像另一个开发人员想要查看整个"门户"根(也获得父pom),他们默认也会删除所有标签和分支的副本!不太理想.
我唯一能想到的就是使用这样的东西:
portal_root
+tags
+branches
+trunk
+project1
+src
pom.xml
+project2
.
.
.
pom.xml
Run Code Online (Sandbox Code Playgroud)
但是,现在所有项目更改都将在tags文件夹中进行跟踪.这对我来说不是一个大问题,但现在分支似乎变得很痛苦.
我现在也正在努力将Teamcity连接到这个,这将更容易一些,因为我只需要观察一个目录(例如标签)来捕获需要构建的所有内容.我还将工件部署到企业Nessus存储库.
我希望有人可以在这里给我一些建议,因为我无法找到任何体面的文档来讨论整个构建生命周期和最佳实践.
我喜欢能够使用单个maven命令构建和部署所有项目的想法.我也喜欢在一个地方拥有所有常见的依赖项,存储库信息和插件信息.
我有一些相关的遗留项目是一团糟,我想将它们作为一个在subversion上共享的多模块项目(第一个多模块项目,我们总是把它们分开).有几个关键部分1)webservice,2)各种swing客户端,3)模型(w /持久性来自hibernate),4)核心JSE任务.
我一直在努力使用Eclipse(Helios),Maven(2.2.1),m2eclipse(0.10.0)和Subversion(1.6)为我们的团队正确设置它几天.我一直在捣乱自己,或者随机出现错误,迫使我回溯.我希望有人可以帮我解决一些最好的做法.
以下是一些问题:
m2eclipse需要一个"平面"的eclipse项目结构.这是否意味着我应该为每个模块创建一个subversion存储库?如果我做一个存储库并尝试从父项目签入,我很难在嵌套项目目标(和其他)目录上设置svn:ignore属性.
如果我为每个存储库执行一个模块,我似乎可以在ok中检查它们.那么问题是通过subclipse检查的最佳方法是什么?有最好的订单吗?父母或子女项目首先?我是否需要签出父项目并修改子项目的结帐路径以嵌套在文件目录中,以便我从父项目中"清理安装"?
或者,我应该放弃subclipse和m2eclipse并结帐并从命令行运行我的maven目标.
或者,我应该只使用SCM与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)
你看,我有很多库和许多使用这些库的项目.
所有这些都结合到一个多模块项目中,因为我喜欢
mvn test在完成一些全局重构之后,只做一个单独的编译和测试我的所有代码.目前,我的所有模块都是版本1.0-SNAPSHOT.
现在我想发布项目,p2并且所有库都p2使用(例如lib1和lib2)版本1.0.从那以后,我做了一些修改代码lib1,但没有上lib2.
我希望下一个版本p2是版本1.1,lib1在版本中使用1.1(它自上一版本以来已被修改),但lib2仍然在版本中1.0(因为它没有被修改).
更一般:如果我发布了一个版本,我想增加自上次发布以来发布项目的次要编号以及所有已更改的库.
我是否必须自己照顾所有模块版本,或者是否有能够为我完成所需工作的插件?
我有几个 Maven 项目:
虽然commons-lib不太可能单独发布,但所有其他项目(父项目除外)可能会单独发布。
如果列表中的前四个是第五个的子模块,作为回报,它们是否必须将其父模块设置为父模块(例如 all-services-parent)?
因为我想在用户和复合服务中包含commons-lib,所以我知道我必须先构建它。但是:上述每项服务都可能单独发布 - 那么哪种建筑结构最适合我的需要?
可不可能是:
-- all-services-parent
|-- (maven sub-module) commons-lib
|-- (maven sub-module) user-service
|-- (maven sub-module) composite-service
|-- (maven sub-module) frontend-service
Run Code Online (Sandbox Code Playgroud)
或者:
-- all-services-parent
|-- user-service-parent
|-- (maven sub-module) commons-lib
|-- (maven sub-module) user-service
|-- composite-service-parent
|-- (maven sub-module) commons-lib
|-- (maven sub-module) composite-service
|-- frontend-service
Run Code Online (Sandbox Code Playgroud)
第二个构建结构将允许我通过在所有服务父级上调用“mvn …
在Maven多模型中,我们有一个父pom,其中模块在<modules>tag中定义,在每个模块中,我们定义父pom是谁.
为什么这个双向定义?
为什么不在模块的父部分中定义它们之间的关系?
如果模块总是绑定到父模块,我应该如何重用模块?
我有一个带有子项目的项目,想要对孩子进行maven释放(项目B):
Project-A/
pom.xml
Project-B/
pom.xml
src/
Run Code Online (Sandbox Code Playgroud)
Project-A的文件夹同时是我的git存储库,我从我们的中央git服务器克隆.
对于我们的发布,我们使用jenkins作为构建服务器和Jenkins Maven Release Plug-in来启动发布版本.
因此,在jenkins Job(称为JobB)启动后,它会将Project-A文件夹签出到以下位置:/Users/titan/.jenkins/jobs/JobB/workspace.
由于git的工作方式,我只能克隆我的结构的顶层.所以这意味着我需要将我想要在jenkins中构建的pom设置为Project-B/pom.xml,然后将更改maven用于执行其工作的工作目录.
这会产生很多git问题,因为maven发布插件试图提交到错误的目录(它假定Project-A/Project-B /是一个有效的git存储库).我可以解决所有这些问题(通过在执行发布时停用推送到远程仓库并在执行发布时指定正确的scm url.)
这是Release goals and optionsjenkins JobB配置中字段的值:
-X -DpreparationGoals="clean install"
-DpushChanges=false
-DconnectionUrl=scm:git:file:///Users/titan/.jenkins/jobs/JobB/workspace
release:prepare release:perform
Run Code Online (Sandbox Code Playgroud)
需要connectionUrl的文件URL,因为我没有将更改推送到git远程服务器以及在maven开头执行的克隆:perform将找不到需要签出的标记.
毕竟这是我的问题,我无法解决:
maven:准备步骤贯穿并完成所有工作(更改pom中的版本号,创建发布标记).然后该maven:perform步骤开始,将内容从git存储库,checkouts标记克隆到目标文件夹,然后调用deploy命令.
但是这里是在顶层调用调用的deploy命令的问题,因此它正在部署Project-A而不是Project-B.作业本身正在运行,没有任何错误,它只是构建和部署错误的东西.
以下是maven生成的用于执行部署的命令:
[INFO] Executing goals 'deploy'...
[DEBUG] Using ${maven.home} of: '/usr/share/java/maven-3.0.3'.
[DEBUG] Executing: /bin/sh -c cd /Users/titan/.jenkins/jobs/jobB/workspace/Project-B/target/checkout && /usr/share/java/maven-3.0.3/bin/mvn -B -X -D maven.repo.local=/Users/titan/.m2/repository -s /Users/titan/.m2/settings.xml -D performRelease=true deploy
Run Code Online (Sandbox Code Playgroud)
所以它调用checkout目录中的pom文件而不是checkout/Project-B.有趣的是,maven:准备步骤确实在正确的pom上执行.
不使用jenkins,直接从shell调用mvm命令.这给了我相同的结果.所以我认为詹金斯不是问题.
更改路径与聚甲醛-Darguments="-f sword-packaging-wbf/pom.xml"和用 -Darguments="-DpomFileName=sword-packaging-wbf/pom.xml"
两种方法都不会改变结果中的任何内容.在查看输出时,我看到-f <path>在生成的命令中忽略了它,因为它 …
我有maven多模块项目.在父级别,我有一些java文件.在父pom.xml中,在包阶段我做了一些事情.
通常,当我在父级别运行mvn包时,将运行父pom的包阶段,并且所有模块也将被打包.
我正在寻找一种允许我这样做的方法(当我运行mvn包时):
我可以在这些问题上使用个人资料吗
谢谢.
我如何组合两个maven项目.一个是webapp,另一个是一些javascript库(也是webapp),我想与其他项目结合.
或者,更好的是,如何将一些带有js文件的外部文件夹添加到可以部署在测试服务器上然后构建为war的maven项目.
maven ×7
java ×3
eclipse ×1
git ×1
javascript ×1
jenkins ×1
maven-2 ×1
maven-module ×1
module ×1
profile ×1
spring-boot ×1
svn ×1