SpringBoot项目部署问题
在使用SpringCloud构建项目时,后期难免会想将开发好的项目部署上去,以下即演示和记录部署时遇到的错误。
关于项目打包问题:
使用maven构建项目,在idea中有提示按钮,选中package即可将Springboot项目打包成jar包,如有父工程做依赖控制,即可直接在父工程进行package
即后所有子项目也都会打包。
pom.xml配置问题
打包必不可少的就是配置文件,如果pom中没有配置好,就算打包好后,启动都会有各种千奇百怪的错误。在pom.xml中,可配置我们项目的一个编码:
<!-- 编译时编码格式设定 -->
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<!-- 编码格式设定 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
在 <build></build>
中,也需要去针对性的指定我们每个jar包的入口文件。以system-admin
为例,因为这个为可运行jar,我们就需要在其pom.xml
中去配置来指定我们的启动类。
如果不进行指定启动类配置字的话,启动jar就会出现如下错误:
system-admin. jar中没有主清单属性
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
<!-- 如果没有该配置,devtools不会生效 -->
<!-- 指定该Main Class为全局的唯一入口 -->
<mainClass>com.demo.AdminApplication</mainClass> <!--指定为该模块的启动类-->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
关于项目的编码问题我们已经解决,但是因为我目前项目的配置文件是在nacos中,所以说当jar启动读取远程配置文件时,会出现读取文件编码问题,这时候就需要使用到另外一个命令启动
java -Dfile.encoding=UTF-8 -jar system-admin.jar
在我启动的时候,使用的是powershell窗口,因为窗口命令问题,-Dfile
会识别为poswershell的命令,从而导致如下错误:
错误: 找不到或无法加载主类 .encoding=UTF-8
解决的方法也很简单,只需要切换为cmd窗口去执行命令即可。
关于碰到的一些错误。
at org.springframework.cloud.bootstrap.config.PropertySourceBootstrapConfiguration.initialize(PropertySourceBootstrapConfiguration.java:98)
at org.springframework.boot.SpringApplication.applyInitializers(SpringApplication.java:626)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:370)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:314)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)
at com.tang.GatewayApplication.main(GatewayApplication.java:25)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:51)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:52)
Caused by: java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:125)
at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:183)
... 40 common frames omitted
在启东时没有加上 -Dfile.encoding=UTF-8
启动,就会报如下错误java.nio.charset.MalformedInputException: Input length = 1
这是因为读取nacos配置文件为乱码,所以在启动时需要去注意到。