一、问题

  我们平时开发项目,使用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发部项目的最实用配置的更多相关文章

  1. 【IDEA】IDEA创建Maven的Web项目并运行以及打包

     0.IDEA集成Maven并设置Maven的配置 idea15之后的版本,都自带了maven插件,idea14貌似需要自己安装,方法也很简单:File->Settings->Plugin ...

  2. 记录一次OracleJDK开发的项目发部到Linux中使用OpenJDK启动后失败的错误的解决方案

    一.现象 基于JAVA SpringBoot2.0.4的项目,发部后项目发部后,放到OpenJDK环境中运行时,提示下列错误: 2019-10-22 10:03:55 [main] WARN  o.s ...

  3. IDEA下使用maven构建web项目(SpringMVC+Mybatis整合)

    需求背景:由于最近总是接到一些需求,需要配合前端团队快速建设移动端UI应用或web应用及后台业务逻辑支撑的需求,若每次都复用之前复杂业务应用的项目代码,总会携带很多暂时不会用到的功能或组件,这样的初始 ...

  4. 如何使用maven搭建web项目

    博客园注册了有二十多天了,还没有写过博客,今天就发一篇,也便于后面查找笔记. 我个人已经做了几年的java web开发了,由于所在的公司是业务型公司,用的都是一些老旧的稳定技术,很少接触到稍微新点的内 ...

  5. maven多模块项目构建

    描述 一个大的企业级项目通常跨越了数十万行代码,牵涉了数十或数百软件人员的努力.如果开发者在同一个项目下开   发,那么项目的管理.构建将会变得很难控制.因此设计人员会将项目划分为多个模块,多个模块独 ...

  6. Maven打包jar项目

    默认情况下,使用maven打包的jar项目(执行maven install)不会包含其他包引用,要想打包为带其他项目引用的jar,需要加入插件 要得到一个可以直接在命令行通过java命令运行的JAR文 ...

  7. 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 ...

  8. Maven多模块项目搭建

    最近一直在思考如何能够更好的重用代码.减少重复劳动,之前有一篇文章通过导入JAR包的形式,可以重用部分形如util类的方法,但是这样的话,管理起来jar包,特别是协同工作,多项目情况下,管理JAR会出 ...

  9. maven 学习---使用Maven创建Java项目

    在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...

随机推荐

  1. 【IDE_IntelliJ IDEA】idea主题设置

    参考博文: IDEA 炫酷的主题字体颜色设置 idea主题下载

  2. Springboot的entity,dao,controller,service层级理解

    1.Dao层:持久层,主要与数据库交互 DAO层首先会创建Dao接口,接着就可以在配置文件中定义该接口的实现类:接着就可以在模块中调用Dao的接口进行数据业务的处理,而不用关注此接口的具体实现类是哪一 ...

  3. 每天一套题打卡|河南省第八届ACM/ICPC

    A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...

  4. Python 函数小程序初解

    目录 作业 ==程序代码自上往下运行,建议自上而下的完成下列任务== 作业 文件a.txt内容:每一行内容分别为商品名字,价钱,个数,求出本次购物花费的总钱数 sum = 0 f = open('a. ...

  5. 201871010101-陈来弟《面相对象程序设计(java)》第十周学习总结

    201871010101-陈来弟<面相对象程序设计(java)>第十周学习总结 实验八异常.断言与日志 实验时间 2019-11-1 1.实验目的与要求 (1) 掌握java异常处理技术: ...

  6. 201871010104-陈园园《面向对象程序设计(java)》第十六周学习总结

    201871010104-陈园园<面向对象程序设计(java)>第十六周学习总结 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ ...

  7. 第七周scrum会议

    本周会议地点依旧 会议照片: 本周内容: 讨论了进行中的难点 我们正在分析图书馆首页的网页结构以及各种跳转的请求以及链接,为爬虫的实现奠定基础. flask框架我们也遇到了很多问题,正在进行官方文档的 ...

  8. luoguP3172 [CQOI2015]选数

    题意 所求即为: \(\sum\limits_{i_1=L}^{R}\sum\limits_{i_2=L}^{R}...\sum\limits_{i_k=L}^{R}[\gcd(i_1,i_2,... ...

  9. JAVA List中剔除空元素(null)的方法

    方法一.list.removeAll(Collections.singleton(null)); 方法二.List nullList = new ArrayList();                ...

  10. 解决js 0.1 + 0.2 = 0.30000000000000004 的位数精度问题

    https://www.html.cn/archives/7340 解决办法 parseFloat((0.1 + 0.2).toFixed(10))