通过Maven发部项目的最实用配置
一、问题
我们平时开发项目,使用Maven或者Idea部署,尽可能是要做到自动化。一般情况下,做成自动化的方式有多种,下面简述我比较常用的3种。
二、解决方案一:
(1)配置发部:使用IDEA自带的Artifacts功能,先打开【File】菜单下的【Project Structure】菜单,点到【Artifacts】,按自己的项目类型添加一个类别,比如SpringBoot项目,可以添加为【JavaEE Application Exploded】项,起个名称,然后在要发部的右侧的【Available Element】列表列出的微服务或者主模块上,右击选择【Put Into Output Root】,然后点击【Apply】并点击【OK】保存。
(2)执行发部:配置完后,执行IDEA主菜单顶部的【Build】-【Build Artifacts...】-【Rebuild All】,编译完成后,将自动发部到项目根目录下的out/artifacts/xxx目录下。
(3)发部运行:发部运行的方式,有很多种,比如最简单的方法之一是,使用IDEA自带的【Tools】-【Deployment】-【Deployment】中配置远程FTP服务器,或者配置SSH连接,用于一键发部文件到生产环境上指定目录下。然后配置一个Dockerfile和一个start.sh角本,并通过"docker build -t myapp:v1 ."命令事先部署部署一个DockerSwarm或者Docker程序。把程序文件映射到远程服务器的物理磁盘上。然后通过前面的IDEA的配置配置到FTP该目录。这样就可以一键自动发部项目了。缺点是一般IDEA的配置不会提交到GIT里,所以如果有同事需要发部,还得使用你的电脑,或者他自己电脑上也做相同的配置,来发部项目。
FROM openjdk:8-jre
MAINTAINER songxingzhu
WORKDIR /app
ADD ./ /app/
ENV JAVA_OPTS "-Xms400m -Xmx3g"
ENV spring.profiles.active test
ENV file.encoding UTF-8
EXPOSE 8081
RUN chmod 777 /app/start.sh
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["/app/start.sh"]
二、解决方案二:
(1)配置发部:在要发部的模块的pom.xml中,添加下列代码:
<build>
<finalName>service-webapi</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<plugins>
<!-- 设置源文件编码方式 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.test.webapi.WebApiApplication</mainClass>
</manifest>
</archive>
<outputDirectory>${project.build.directory}/classes</outputDirectory>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.xml</exclude>
<exclude>*.sh</exclude>
</excludes>
</configuration>
</plugin>
<!-- 拷贝依赖的jar包到lib目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/classes/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<!-- 解决资源文件的编码问题 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
(2)执行发部:在项目目录下,执行 mvn package 即可,编译完后,代码会出现在相应的模块的/target/classes目录下(发部到此目录的原因是,这样就不会影响IDEA的正常使用) 。如果要跳过测试,可以在父模块或者相应的模块的pom.xml中,添加下列内容,即可实现:
<!--编译插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<skip>true</skip>
</configuration>
</plugin>
<!--跳过测试-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
(3)发部运行:同上。
三、解决方案三:
方案三,使用Gitlab的CICD(需要Gitlab安装gitlab-runner)或者使用Jenkins,结合Docker来做。因为平时做的最多客户一般都不太愿意提供服务器部署Kubernetes,所以我一般会用Docker Swarm来做,简单方便又轻量级。使用CICD的DevOps模式比较推荐,团队每个人只要Merge一下代码到指定分支,即可完成自动化编译、测试、发部部署,因为也不复杂,我这里时间紧张就不描述了。
四、解决方案四:
方案四,配置IDEA+Docker实现。在IDEA中默认安装了Docker插件,因此可以直接在Dockerfile执行运行,并配置一下Dockerfile的镜像编译命令和远程Docker中开启远程访问即可。
通过Maven发部项目的最实用配置的更多相关文章
- 【IDEA】IDEA创建Maven的Web项目并运行以及打包
		
0.IDEA集成Maven并设置Maven的配置 idea15之后的版本,都自带了maven插件,idea14貌似需要自己安装,方法也很简单:File->Settings->Plugin ...
 - 记录一次OracleJDK开发的项目发部到Linux中使用OpenJDK启动后失败的错误的解决方案
		
一.现象 基于JAVA SpringBoot2.0.4的项目,发部后项目发部后,放到OpenJDK环境中运行时,提示下列错误: 2019-10-22 10:03:55 [main] WARN o.s ...
 - IDEA下使用maven构建web项目(SpringMVC+Mybatis整合)
		
需求背景:由于最近总是接到一些需求,需要配合前端团队快速建设移动端UI应用或web应用及后台业务逻辑支撑的需求,若每次都复用之前复杂业务应用的项目代码,总会携带很多暂时不会用到的功能或组件,这样的初始 ...
 - 如何使用maven搭建web项目
		
博客园注册了有二十多天了,还没有写过博客,今天就发一篇,也便于后面查找笔记. 我个人已经做了几年的java web开发了,由于所在的公司是业务型公司,用的都是一些老旧的稳定技术,很少接触到稍微新点的内 ...
 - maven多模块项目构建
		
描述 一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力.如果开发者在同一个项目下开 发,那么项目的管理.构建将会变得很难控制.因此设计人员会将项目划分为多个模块,多个模块独 ...
 - Maven打包jar项目
		
默认情况下,使用maven打包的jar项目(执行maven install)不会包含其他包引用,要想打包为带其他项目引用的jar,需要加入插件 要得到一个可以直接在命令行通过java命令运行的JAR文 ...
 - IDEA02 利用Maven创建Web项目、为Web应用添加Spring框架支持、bean的创建于获取、利用注解配置Bean、自动装配Bean、MVC配置
		
1 环境版本说明 Jdk : 1.8 Maven : 3.5 IDEA : 专业版 2017.2 2 环境准备 2.1 Maven安装及其配置 2.2 Tomcat安装及其配置 3 详细步骤 3.1 ...
 - Maven多模块项目搭建
		
最近一直在思考如何能够更好的重用代码.减少重复劳动,之前有一篇文章通过导入JAR包的形式,可以重用部分形如util类的方法,但是这样的话,管理起来jar包,特别是协同工作,多项目情况下,管理JAR会出 ...
 - maven 学习---使用Maven创建Java项目
		
在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...
 
随机推荐
- mysql_innodb存储引擎的优化
			
采用innodb作为存储引擎时的优化 innodb_buffer_pool_size 如果用 Innodb,那么这是一个重要变量.相对于 MyISAM 来说,Innodb对于 buffer size ...
 - fitEllipse的外接矩形与拟合的椭圆参数关系
			
根据我看的博客,fitEllipse返回的外接矩形(假设为box),对应椭圆的相应参数: box.size.width 和box.size.height对应椭圆的长轴和短轴: box.center对应 ...
 - 2018710101110-李华《面向对象程序设计(java)》第十二周学习总结
			
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.com/nwnu-daizh/p ...
 - 201871010131-张兴盼《面向对象程序设计(java)》第十四周学习总结
			
项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业要求在哪里 https://www.cnblogs.com/lily-2018/p/1 ...
 - django学习-视图练习
			
写一个真正有用的视图 每个视图必须要做的只有两件事: 返回一个包含被请求页面内容的HttpResponse对象,或抛出一个异常,比如Http404. 至于你还想干些什么,随便你. 你的视图可以从数据库 ...
 - c#窗体之登录页(已连接数据库)
			
效果图: 源码: 页面: using System; using System.Collections.Generic; using System.ComponentModel; using Syst ...
 - Fedora增加rc-local服务开机自启项
			
最近新装了一台Fedora 30系统,服务已经正常运行起来了,但是偶然发现当我的系统重启后,写在rc.local配置文件里的命令居然没生效,导致我系统重启,但是服务却没有正常运行,后来经过一番查阅 ...
 - Xamarin.Forms移动开发系列1:介绍和安装
			
摘要 Xamarin成立于2011年5月16日.Xamarin 是一套基于C#语言的跨平台移动应用开发工具,2016年2月24日被微软正式收购. 前言 很早就已经听说强大的.NET生态中有一个移动开发 ...
 - [LeetCode] 457. Circular Array Loop 环形数组循环
			
You are given a circular array nums of positive and negative integers. If a number k at an index is ...
 - thinkphp5.0 - 安装
			
1.thinkphp 5.0 可以通过下载,git 等方式安装,我这里采用下载完整版安装,解压到一个目录下就行了 2.配置 web 服务器配置文件,我是用的是 nginx(nginx/1.9.15) ...