文章目录
- 1、pom文件中
- 1.1 maven-compiler-plugin
- 1.2 spring-boot-maven-plugin
- 1.2.1 排除一个具体的maven模块
- 1.2.2 排除和“指定的artifactId”相符的所有maven模块
- 1.2.3 排除属于“指定的groupId”的所有maven模块
- 2、jar包名
- 3、maven打包
- 4、运行jar包
- 4.1 控制台运行jar包
- 4.2 后台运行jar包,关闭终端不影响jar包运行
- 4.3 后台运行jar包,正确的日志和错误的日志分别输入到不同的文件中
- 5、打包生成war包
- 6、遇到的错误以及注意事项
- 6.1 访问HTML页面找不到对应的页面
- 6.2 target中生成了HTML文件,仍然找不到HTML页面
- 6.3 pom文件中`maven-compiler-plugin`或者`spring-boot-maven-plugin`等插件无法正确的导入(变红)
SpringBoot项目完成开发后需要打包成jar包/war包,并部署运行,才算完成了整个项目的流程。
1、pom文件中
<build>
<finalName>DAG-1.0</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>11</source>
<target>11</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
</build>
1.1 maven-compiler-plugin
maven-compiler-plugin
可以指定项目中JDK的版本,以及指定编译生成的class文件的版本。在我的例子中我指定了开发时源代码中使用的是JDK11,生成的class文件也是对应JDK11.
1.2 spring-boot-maven-plugin
spring-boot-maven-plugin
使用Maven进行打包的插件。repackage
重新打包应用程序。默认情况下,repackage和run这两个maven目标会包括定义在工程中的任何依赖。
一些依赖被要求从可执行jar包中排除。下面有三种方式可以在包运行时排除依赖模块:
1.2.1 排除一个具体的maven模块
排除一个具体的maven 模块,通过唯一的groupId和artifactId组合来实现。(如果有必要,可以加入classifier来唯一确认。)
<build>
<finalName>DAG-1.0</finalName>
<plugins>
......
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<excludes>
<groupId>com.foo</groupId>
<artifactId>bar</artifactId>
</excludes>
</excludes>
</configuration>
</plugin>
</plugins>
......
</build>
排除com.foo下的bar模块。
1.2.2 排除和“指定的artifactId”相符的所有maven模块
排除和“指定的artifactId”相符的所有maven模块。
<build>
<finalName>DAG-1.0</finalName>
<plugins>
......
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<excludeArtifactIds>my-lib,another-lib</excludeArtifactIds>
</excludes>
</configuration>
</plugin>
</plugins>
......
</build>
排除artifactId
为my-lib
、another-lib
的所有模块,即所有groupId
下artifactId
为my-lib
、another-lib
的模块。
1.2.3 排除属于“指定的groupId”的所有maven模块
<build>
<finalName>DAG-1.0</finalName>
<plugins>
......
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<excludeGroupIds>com.foo</excludeGroupIds>
</excludes>
</configuration>
</plugin>
</plugins>
......
</build>
排除groupId
为com.foo
下的所有模块.
2、jar包名
<finalName>Your jar Package Name</finalName>
build中的fileName
指定了打包生成的jar包的名字。
3、maven打包
在SpringBoot项目的根目录下执行如下命令:
mvn package spring-boot:repackage
即可在根目录下生成target文件夹,里面包含了xxx.jar.
4、运行jar包
4.1 控制台运行jar包
java -jar xxx.jar
4.2 后台运行jar包,关闭终端不影响jar包运行
nohup java -jar DAG-1.0.jar > msg.log 2>&1 &
后台运行jar包,日志信息输入到msg.log文件中,错误日志和正确日志都输入到msg.log中。
在命令最后加上&符号,表示让这个进程到后台去执行,这样立刻返回到提示符状态,我们可以接着做下面的事。
4.3 后台运行jar包,正确的日志和错误的日志分别输入到不同的文件中
nohup java -jar DAG-1.0.jar >> msg1.log 2>>msg2.log &
正确的日志输入到msg1.log中,错误的日志输入到msg2.log中.
5、打包生成war包
默认生成的是jar包。在pom文件中指定要生成的什么形式的包
<packaging>war</packaging>
<name>DAG-1.0</name>
<description>DAG project for Spring Boot</description>
执行打包命令
mvn package spring-boot:repackage
可以看到生成了war包,部署war包运行程序.
6、遇到的错误以及注意事项
6.1 访问HTML页面找不到对应的页面
这种情况首先要看一下,生成的target文件夹下面有没有对应的templates文件夹及其中应该包含有的xxx.html文件。程序运行时只认识target文件夹下的东西,如果target文件夹下面根本就没有对应的templates文件夹和xxx.html文件,肯定是无法打开HTML页面的。
造成这个错误的常见原因是没有指定将xxx.html作为项目的资源进行打包,这个需要在pom文件中指明。
<build>
......
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
<include>**/*.html</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<build>
如上面的,指明了src/main/resources文件夹下面的.properties文件、.xml文件、.yml文件、.html文件和src/main/java文件夹下面的.properties文件、.xml文件、.yml文件被作为项目的资源文件,因此在生成的target文件中才能找到html文件.
如果去掉对.html文件的指明,生成的target文件夹中找不到对应的HTML文件,也就打不开HTML页面了。
<build>
......
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
<build>
去掉后,生成的target文件夹中没有HTML文件.
没有templates文件夹及其中的HTML文件,运行程序将无法访问HTML页面.
6.2 target中生成了HTML文件,仍然找不到HTML页面
很有可能是thymeleaf
的配置写错了。
thymeleaf.prefix
处,一定要写正确,不能多一个/
或者少写一个/
,因为这样在写访问页面的,路径时就会多或则少一个/
,将无法找到HTML页面.
6.3 pom文件中maven-compiler-plugin
或者spring-boot-maven-plugin
等插件无法正确的导入(变红)
需要在dependencies中引入这些用到插件,然后再在build中的plugins中引入这些插件.