我必须承认在生活在巨大的debuild / ant /
makefile嵌合结构世界中多年后,我还是Maven世界的新手。我只是还没有那种感觉,可以帮助经验丰富的开发人员选择正确的决策,而且看来Maven中有很多不同的方法。
因此,我有一个包含web-app的简单项目。我基本上想要以下内容:
为了区分开发和生产,我创建了配置文件dev
和prod
。dev
默认情况下,配置文件是激活的。当我想将某些东西部署到生产中时,我只需输入mvn -P prod tomcat:deploy
我已经阅读了有关发行插件以及buildnumber插件的信息。但是我不确定我是否会正确。
因此,问题是-解决我要问的任务的最简洁,自成体系和“保守”的方法是什么?
正如我被评论过的,Shabunk继承了多年开发人员的经验,Maven正在驱动您以最佳方式完成您想要的事情。
我会解释我会做的事情(以及我本人真正要做的事情)。
因此,您正确使用Maven Release Plugin,再加上一个(例如,货运),您正在尝试做两种不同的事情:
Maven发布插件
考虑到您自己的流程可能比其他开发团队所习惯的更加清晰。我的意思是,在较大的团队中,单元测试和生产部署之间需要采取更多步骤(Q&A,用户接受度,非回归标准)。看来您做了链接标签和生产部署的快捷方式。如果要在不同的环境(集成,用户接受度,性能,预生产等)上部署Web应用程序,则必须标识您的版本并必须能够再次构建它(确定并“可重复”)。
那就是maven-release-
plugin的目的。它可以帮助您验证源代码是否干净(所有文件均在源代码控制下,且无修改),可以编译并通过所有测试阶段。然后,它处理pom版本和标记,最后将其存储以供以后在Maven企业存储库中使用。
您需要设置许多配置(ditributionManagement,SCM,maven插件发行版配置)。但是一旦安装到位,发布版本就可以放在一个简单的命令行中:
mvn release:prepare release:perform
如果您需要一些示例,我可以给您一些示例。
<scm>
<!-- Base URL repository -->
<url>scm:svn:http://svn.myorg.corp/svn/repository/</url>
<!-- Developper URL (from trunk or branche) -->
<developerConnection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</developerConnection>
<connection>scm:svn:http://svn.myorg.corp/svn/repository/trunk/project1</connection>
</scm>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-scm-plugin</artifactId>
<version>1.6</version>
<configuration>
<username>${from.settings.xml.user}</username>
<password>${from.settings.xml.password}</password>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.2.2</version>
<configuration>
<tagBase>http://svn.myorg.corp/svn/repository/tags/</tagBase>
<scmCommentPrefix>[DEV#SCM]</scmCommentPrefix>
</configuration>
</plugin>
</plugins>
[...]
</build>
<distributionManagement>
<repository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - Stable versions</name> <url>http://repo.corp:8080/artifactory/prj-xxx-releases</url>
</repository>
<snapshotRepository>
<id>enterprise_repo</id>
<name>Enteprise Repository on Artifactory - DEV versions</name>
<url>http://repo.corp:8080/artifactory/prj-xxx-snapshots</url>
</snapshotRepository>
<site>
<id>corporate_site</id>
<name>Corporate public site</name>
<!-- must add wagon plugin that support this protocol -->
<url>ftp://...</url>
</site>
</distributionManagement>
部署
同样,您可能要在多个环境中测试您的应用程序。有许多插件可让您发送和部署战争:一般的货物插件,或更具体的tomcat插件,glassfish插件,…插件使您能够做自己想做的事情。然后,可以以多种方式执行配置。
完整的Maven方式:
与Maven的完整集成方式是使用Profile或Filters。如您所知,配置文件可以描述特性和行为。过滤器是.properties的一种,它对一组变量进行分组,这些变量将用于将xml配置文件中的模式替换为war(例如db连接)。它不是我使用的那个,因为我发现它不如外部化文件灵活。但是不要紧
Maven及其生态系统: 我更喜欢用Maven和Jenkins(或Continuous
Integration工具)构建应用程序。这就是为什么我同意亚伦说您必须了解您的工具的局限性的原因。使用Jenkins,我每天/每个小时都要针对单元测试,生成的问答报告,文档等等运行我的应用程序……我有一个发行版,可以帮助我制作出想要交付给我的所有内容(交付给我的测试团队或客户),我为工作提供了一些信息,以将其部署到不同的环境中(使用maven配置文件或jenkins内置配置)。
它对我来说真的很好,我很确定这是正确的方法。
[编辑]
部署方式
再次,部署意味着生命周期的不同阶段。
本地/开发环境
到目前为止,我永远不会使用tomcat:deploy,只是因为我更喜欢将码头用作轻型Web容器(并与maven很好地集成在一起)。但是我很确定每种配置都可以满足您的需求。
连续集成环境 在连续集成环境中,我通常直接与Jenkins复制战争(在所需的计算机上导出* .war)。我的工作方式取决于很多事情:
大多数时候,它是一个简单的副本。如果不能,我将使用一些集成的Maven插件(例如著名的CMS的jahia:deploy插件:www.jahia.com),或者仅使用cargo插件:http
://cargo.codehaus.org/Maven2+plugin
。我没有任何示例,但是在Internet上找到一些示例确实很容易,因为通常建议使用此配置。
问答/验收/生产环境
对于那些经常(据我在工作中所见)处理服务水平协议的环境,我们(我或管理团队)编写了一些特定的脚本。我敢肯定您会失望的,但是正如我提到的,我并不依赖Maven来完成所有事情,尤其是部署。恕我直言,这是此工具的一个限制。您也许可以依靠货运插件,也可以依靠特定的插件,但可以发布一个版本,或者构建一个与实际部署不匹配(按时间顺序)的版本。更重要的是,我找不到任何可以轻松在多个实例上进行部署的插件……甚至值得您以特定顺序关闭实例(SLA的需要)。就是说,我没有提到外部属性,SQL脚本或其他任何内容。它们是依赖专用工具的其他原因。
因此,通常,我们编写了自己的ant / sell脚本。如果其他人有更好的解决方案,那么我显然很困惑!
我希望我足够清楚。
问候。
问题内容: 我是ReactJS的新手,正在尝试了解什么是将代码部署到生产中的最佳方法。按照下面的链接,我正在使用babel作为下面的代码进行构建,但是我想知道 这是否很好,或者是否有 将ReactJS部署到生产中的 其他最佳实践 : http://www.sitepoint.com/getting-started-react- jsx/ 这是我的index.html和main.js文件: inde
也许有一些我看不到的非常简单的东西。我正在尝试从某个API调用一个方法,这个方法要求PendingIntent异步向我发送一些值。我已经阅读了半小时的文档和示例,无法理解简单的方法。 更准确地说,我想调用ActivityRecognitionApi。为了举例说明,我是如何从类似的api接收位置的: 所以我想做同样的事情来接收认可的活动: 那么,创建一个PendingEvent来获取价值的简单方法是
删除警告 为了减少文件大小,Vue 精简独立版本已经删除了所有警告,但是当你使用 Webpack 或 Browserify 等工具时,你需要一些额外的配置实现这点。 Webpack 使用 Webpack 的 DefinePlugin 来指定生产环境,以便在压缩时可以让 UglifyJS 自动删除代码块内的警告语句。例如配置: var webpack = require('webpack') mo
本文向大家介绍Django + Uwsgi + Nginx 实现生产环境部署的方法,包括了Django + Uwsgi + Nginx 实现生产环境部署的方法的使用技巧和注意事项,需要的朋友参考一下 如何在生产上部署Django? Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。 uwsgi介绍 uWSGI是一个Web服务器,它实现了WSGI协议、uws
我有一个应用程序,其中前端部署到Netlify,Strapi后端部署到Heroku。我最近将Strapi从v3.0.6升级到了v3.1.3。我以前在生产中使用PostgresQL,所以随着Strapi的升级,我也在尝试转移到MongoDB。 我正在尝试将我的后端部署到生产环境中,但是我不断收到503错误并且应用程序崩溃。您可以从下面的错误日志中看到连接到Mongo数据库存在问题。 以下是我在Her
有一个springboot项目想部署到阿里云上,需要简化部署流程,需要咨询几个问题: 1.生产上使用docker容器部署还是直接手动安装jdk,打jar包上传服务器? 2.使用宝塔部署安全可靠吗,是否可以简化部署,没使用过宝塔? 3.项目用到了MySQL和Redis,单独购买云数据库还是在运行springboot的服务器里自己安装MySQL和Redis服务? 4.项目是前后端分离的,是要单独再购买
我是部署新手,我已经将jar文件作为一个包,我应该如何在prod服务器中进行部署? 我的prod服务器基本上是运行在AWS上的EC2机器 我应该运行java-jar“jar文件”吗?这是prod服务器的实践方式吗? 我应该将. jar文件打包到ears/war并部署在tomcat/jboss服务器中吗? 感谢您的帮助!
san build是生产环境打包,下面详细说下用法。 使用命令 san build [entry] entry:入口文件,用于编译单一文件,不传入,则从当前工作目录,读取 Config 文件的 pages 配置项。 打包结束之后,build 命令默认会生成产出物报表,效果如下: 参数说明 跟性能相关 --modern 是否使用 modern mode 打包,值为 true 或 false,默认是