我对在开发和生产环境中使用maven感到困惑 - 我确信这很简单,我很遗憾。感谢任何帮助......
我在本地机器上的eclipse中设置了maven并编写了一些软件。我真的很喜欢它包括依赖罐子这样的东西很容易。
这就是我的开发环境。但现在我想在远程服务器上将项目发布到生产中。我搜索了文档,但我无法弄清楚它应该如何工作或maven最佳实践是什么..你应该这样做:
a)还要在生产环境中运行maven,并将所有文件上传到生产环境并在那里重建项目? (我在生产服务器上重建“已发布”代码的想法,因此我很确定这是不对的..)
b)使用mvn:package创建你的jar文件,然后将其复制到生产中? (但那么所有那些好的依赖项是什么?是不是存在一个危险,你的测试代码现在将在生产环境中针对不同版本的从属jar运行,可能会破坏你的代码?或者缺少一个jar ......? )
c)其他我不知道的事情......提前感谢您的帮助!
答案 0 :(得分:16)
您应该将您的代码置于版本控制之下(并且您永远不会将文件“上传”到另一台机器,如果需要,您可以从版本控制系统“下载”它们。)
您应该以可以部署在生产环境中执行的格式(WAR,EAR,另一种类型的包)打包您的代码。这样的包通常包括依赖性。要构建更复杂的捆绑包,Maven Assembly Plugin可以提供帮助。
Maven生成的工件(JAR,WAR,等等)应该通过远程存储库共享(因此部署 - 我的意思是mvn deploy
- 到这个远程存储库)。远程存储库可以是通过Web服务器提供的简单文件系统,也可以是更高级的解决方案,如Nexus。
开发通常使用SNAPSHOT依赖项(例如1.0-SNAPSHOT)完成。在发布时,您应该将版本更改为“固定”版本(例如1.0)以及来自pom.xml
的其他位,运行构建以检查一切正常,提交修改后的{{1在VCS中创建一个标记,在pom.xml
中将版本提升为新的SNAPSHOT(例如1.1-SNAPSHOT),在VCS中提交新的pom.xml
。整个过程需要一些工作,但可以使用Maven Release Plugin。
在生产环境中,从远程存储库获取要部署的工件并进行部署(有些项目使用Maven自动部署到生产服务器,但这是另一个故事)。
当然,这方面存在各种变化(部署到生产大部分时间都是公司特定的)但总的想法就在那里。
答案 1 :(得分:3)
答案 2 :(得分:1)
构建工件时,通常会说明依赖项的范围。在默认范围内,它应该打包在您的存档中。如果您不想要它,请使用“提供”范围 - 在这种情况下,您必须准备提供依赖关系的运行时环境。重建一个仅用于部署的软件包通常是一个坏主意。
至于部署,you can use maven's antrun plugin to copy files locally or via scp。