前言

本文主要介绍SpringBoot的一些打包事项和项目部署以及在其中遇到一些问题的解决方案。

SpringBoot打包

在SpringBoot打包这块,我们就用之前的一个web项目来进行打包。
首先需要明确的是,该项目打包的形态是可执行的jar包,还是在tomcat下运行的war包。
虽然本项目是用maven构建的,用maven打包也更加方便,但是这里也说明普通非maven打包的项目如何打包。

Maven打包

首先是maven方式打包:
如果是jar
需在pom.xml指定打成的包为:

<packaging>jar</packaging>  

如果是war包。
需在pom.xml指定打成的包为:

<packaging>war</packaging>  

并通过<scope>标签在打包的时候排除tomcat依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>

然后添加SpringBoot自带的打包方式
示例如下:

<build>
<defaultGoal>compile</defaultGoal>
<sourceDirectory>src</sourceDirectory>
<finalName>springboot-package</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin </artifactId>
<configuration>
<fork>true</fork>
<mainClass>com.pancm.App</mainClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>

注:<finalName>标签是指定打包之后的名称,<mainClass>是指定main函数。

也可以不用SpringBoot自带的打包方式,使用mavenassembly插件进行打包。
示例如下:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.5</version>
<configuration>
<archive>
<manifest>
<mainClass>com.pancm.App</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>

pom.xml中添加完相应的标签之后,我们只需在项目同级(pom.xml同级)输入

mvn clean package

即可完成打包
如果想排除测试代码,则可以输入:

mvn clean package  -Dmaven.test.skip=true

来进行打包。

一般我们是把application.propertieslogback.xml文件放在resources文件夹中,但是进行打包之后,它们也会包含在jarwar包中,如果我们想更改配置,则会比较麻烦。
如果想将它们和项目放在同级目录下,application.properties可以直接移出和项目同级的目录下,因为Spring程序会按优先级从下面这些路径来加载application.properties配置文件:

  • 当前目录下的/config目录
  • 当前目录
  • classpath里的/config目录
  • classpath 根目录

springboot默认加载的logback是在classpath目录下,这时我们只需要在application.properties配置文件指定logback.xml的路径即可。
添加如下:

logging.config=logback.xml

如果引入了第三方的jar包,但是又无法通过maven私服进行下载,这时可以手动进行编译。
例如,我写了一个工具类为Mytools,然后把它打成了一个jar包,然后放在我的这个项目中lib目录下,并且需要引用它,那么此时便可以对该jar包进行编译到本地仓库中,然后再pom.xml添加相应的名称和版本号。
命令示例:

mvn install:install-file -Dfile=lib/pancmtools.jar -DgroupId=com.panncm.utils -DartifactId=pancm-utils -Dversion=1.0 -Dpackaging=jar

pom.xml添加

<dependency>
<groupId>com.panncm.utils</groupId>
<artifactId>pancm-utils</artifactId>
<version>1.0</version>
</dependency>

便可以进行打包了。

普通项目打包

如果是普通的项目,没有使用maven构建的话,可以使用eclipse等工具进行打包。
如果是jar
首先在eclipse中运行该项目(main方法运行),然后在eclipse中右键项目 export ->java -> runnable jar file-> package required libraries into generated jar 指定main方法,然后选择打包的名称以及打包的路径。点击finish完成打包。

如果是war
eclipse中右键项目 export ->web -> war file,然后选择打包的名称以及打包的路径。点击finish完成打包。

Ant打包

介绍了上述两种打包之后,这里介绍下通过ant方法进行打包(需要安装ant环境,安装方式基本和maven一致,指定路径,配置环境变量,这里就不在过多讲述了)。
一般打包之后,我们需要将包和配置文件放在一个目录下,这时我们又不想手动进行复制粘贴的话,就可以用ant来进行打包,将打包的文件整合在一起。
这里我们就编写一个build.xml的配置文件。

<?xml version="1.0" encoding="UTF-8"?>
<project name="springboot-package" default="copyAll" basedir=".">
<property name="build" value="build" />
<property name="target" value="target" />
<target name="clean">
<delete dir="${target}" />
<delete dir="${build}" />
</target> <target name="create-path" depends="clean">
<mkdir dir="${build}" />
</target> <target name="mvn_package" depends="create-path">
<exec executable="cmd" failonerror="true">
<arg line="/c mvn install:install-file -Dfile=lib/pancmtools.jar -DgroupId=com.panncm.utils -DartifactId=pancm-utils -Dversion=1.0 -Dpackaging=jar" />
</exec>
<exec executable="cmd" failonerror="true">
<arg line="/c mvn clean package" />
</exec>
</target> <target name="copyAll" depends="mvn_package">
<copy todir="${build}" file="${target}/springboot-package.jar"></copy>
<copy todir="${build}" file="logback.xml"></copy>
<copy todir="${build}" file="application.properties"></copy>
<copy todir="${build}" file="run.bat"></copy>
</target>
</project>

注:<mkdir dir="${build}" />是指定文件存放的文件夹,executable是使用cmd命令,line是执行的语句, 标签是将文件复制到指定的文件夹中。

然后再新建一个 build.bat文件,里面只需要填写 ant就行了。
准备完之后,只需双击build.bat,项目和配置文件就自动到build文件中了,省去了很多操作。

虽然现在流行通过jenkins进行打包部署,不过使用ant加maven进行打包也不错的,比较简单。

打包遇到的一些问题

问题:source-1.5 中不支持 diamond运算符

解决办法一:
在properties添加
<maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<fastjson>1.2.41</fastjson>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>

解决方案二:
在plugin中添加 <source>1.8</source> 和 <target>1.8</target>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>

问题二:打包出现某jar包无法打入

实际是可以下载,但是无法将此打入包中

解决办法:
pom.xml中添加

<repositories>
<repository>
<id>spring-milestone</id>
<url>http://repo.spring.io/libs-release</url>
</repository>
</repositories>

问题三:mvn clean 失败,出现Failed to execute goal

原因: 在clean的时候,target里面的文件被占用了。
解决办法: 不占用就行了。

SpringBoot部署

如果是jar项目
Windows系统在项目同级目录下输入:

java -jar springboot-package 

即可启动项目。
关闭项目,只需关掉dos界面就可以了。
也可以写一个bat文件进行运行。
示例:

@echo off
title "springboot-package"
java -jar springboot-package.jar

Linux系统在项目同级目录下输入:

nohup -jar springboot-package &

即可启动。
关闭输入:

kill -9 pid(jar的进程id)

也可以在init.d注册一个服务
示例:

ln -s /home/jars/app/springboot-package.jar /etc/init.d/springboot-package
chmod +x /etc/init.d/springboot-package

然后输入:

service springboot-package start|stop|restart

进行启动或者停止。
当然也可以编写xshell脚本进行启动和关闭。
示例:

#!/bin/bash
APPDIR=`pwd`
PIDFILE=$APPDIR/springboot-package.pid
if [ -f "$PIDFILE" ] && kill -0 $(cat "$PIDFILE"); then
echo "springboot-package is already running..."
exit 1
fi
nohup java -jar $APPDIR/springboot-package.jar >/dev/null 2>&1 &
echo $! > $PIDFILE
echo "start springboot-package..."

如果是war项目
war放在tomcat/webapp目录下,然后启动tomcat就可以了。Windows系统 在tomcat/bin目录下双击startup.bat即可启动,双击shutdown.bat关闭。
Linux系统则在tomcat/bin 目录下输入startup.sh即可启动, 输入shutdown.sh关闭。

转载自:

SpringBoot简单打包部署(附工程)

Springboot入门5-项目打包部署(转载)的更多相关文章

  1. SpringBoot入门教程(二)CentOS部署SpringBoot项目从0到1

    在之前的博文<详解intellij idea搭建SpringBoot>介绍了idea搭建SpringBoot的详细过程, 并在<CentOS安装Tomcat>中介绍了Tomca ...

  2. Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十四):项目打包部署

    项目打包部署 安装MySQL镜像 注意:如果使用docker镜像安装MySQL,也需要在前端部署主机安装MySQL,因为备份还原功能是使用MySQL的本地命令进行操作的. 下载镜像 执行以下命令,拉取 ...

  3. SpringBoot多模块项目打包问题

    项目结构图如下: 在SpringBoot多模块项目打包时遇见如下错误: 1.repackage failed: Unable to find main class -> [Help 1] 解决步 ...

  4. SpringBoot使用Maven插件打包部署

    [问题] 之前一直用SpringBoot做一些小项目,想打包部署在环境上,总是少依赖包jar.百度下可以通过Spring Boot Maven plugin插件,把Maven配置的依赖包都打到项目包里 ...

  5. 【转】vue项目打包部署——nginx代理访问

    我又来了,今天部署了下vue项目,使用nginx做了代理,这样可以解决跨域的问题,这里做一个简单讲解. 1.先看vue项目打包(我这里使用的是vscode开发工具) 这里是我的项目结构: 打包之前需要 ...

  6. vue项目 打包部署上线

    1. npm run dev:本地开发的时候做调试用的. 2. npm run build:打包部署上线,生成一个 dist 文件夹. 注意:用 npm run build 时,常遇到因引用路径不对导 ...

  7. 如何将Spring Boot项目打包部署到外部Tomcat

    1.项目打包     项目开发结束后,需要打包部署到外部服务器的Tomcat上,主要有几种方式. (1)生成jar包 cd 项目跟目录(和pom.xml同级)mvn clean package## 或 ...

  8. vue之项目打包部署到服务器

    这是今年的第一篇博客.整理一下vue如何从项目打包到部署服务器,给大家做下分享,希望能给大家带来或多或少的帮助,喜欢的大佬们可以给个小赞,如果有问题也可以一起讨论下. 第一步:这是很关键的一步.打开项 ...

  9. maven项目打包部署到虚拟机测试和生产环境上及查看日志操作

    调试通过后提交代码到gitlab,打包部署到相应环境(测试或生产环境)步骤一样1.打包在要打包的项目上右键run as maven clean 清除原来的包,然后run as maven instal ...

随机推荐

  1. Python&Selenium借助html-testRunner生成自动化测试报告

    一.摘要 本博文将介绍Python和Selenium进行自动化测试时,借助html-testRunner 生成自动化测试报告 安装命令:pip install html-testRunner 二.测试 ...

  2. 第一节:python读取excel文件

    写在前面: (1)Excel中数字格式int(1),读出的是float(1.0)类型,导致传参时造成不同,强制转换时,int(str(1.0))在2.7版本又会报错ValueError: invali ...

  3. CSCD核心,北大中文核心

    从两篇文章看两个杂志 title 子空间聚类的重建模型及其快速算法 稀疏正则非凸优化问题之全局收敛分析 author 夏雨晴(浙江大学数学科学学院),张振跃 储敏(武汉大学数学与统计学院) journ ...

  4. [TJOI2019]唱、跳、rap和篮球——容斥原理+生成函数

    先附一组sd图 然后放上原题链接 注意,队伍不同指的是喜好不同,不是人不同 先想到\(DP\),然后你会发现并没有什么优秀的状态设计,然后我们考虑容斥 设\(lim\)表示选的癌坤组数的上限,\(f_ ...

  5. [MySQL优化] -- 如何查找SQL效率地下的原因

    [MySQL优化] -- 如何查找SQL效率地下的原因   来源: ChinaUnix博客 日期: 2009.07.20 16:12 (共有条评论) 我要评论       查询到效率低的 SQL 语句 ...

  6. Rendering in UE4(Gnomon School UE4 大师课笔记)

    Rendering in UE4 Presented at the Gnomon School of VFX in January 2018, part two of the class offers ...

  7. Codeforces Round #588 (Div. 2) E. Kamil and Making a Stream(DFS)

    链接: https://codeforces.com/contest/1230/problem/E 题意: Kamil likes streaming the competitive programm ...

  8. 11 git第二部分(未完成)

    https://www.cnblogs.com/shangchunhong/p/9444335.html

  9. 弱势图解AC自动机

    本篇文章主要详细介绍$AC$自动机的$fail$指针: 如果有什么不完善的地方,请联系我$qwq$ 前置知识: 1.建议学一下$kmp$算法 2.$Trie$ 导入: AC自动机是用来解决多模板匹配问 ...

  10. 【CUDA 基础】5.3 减少全局内存访问

    title: [CUDA 基础]5.3 减少全局内存访问 categories: - CUDA - Freshman tags: - 共享内存 - 归约 toc: true date: 2018-06 ...