起源

最近第一次用Spring-Boot写数据中间件,在打包的时候发现了一个很坑爹的事情。

1、首先我的application.properties 指定的是生产环境配置文件 spring.profiles.active=prod 生产环境使用 的数据库是内网地址,然鹅在用 mvn package 命令时发现,打包的时候要跑一遍Test,可想而知的是当然 Test不通过啊。因为数据库用的是内网地址。

2、然后其实是可以使用Spring Boot 的repackage命令的,但是更坑爹的事情又发生了。报了下面的错误。 感觉人生一下子走到了十字路口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building week-report 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- spring-boot-maven-plugin:1.4.3.RELEASE:repackage (default-cli) @ week-report ---
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.099s
[INFO] Finished at: Thu Jan 19 10:28:23 CST 2017
[INFO] Final Memory: 15M/225M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:1.4.3.RELEASE:repackage (default-cli) on project week-report: Execution default-cli of goal
org.springframework.boot:spring-boot-maven-plugin:1.4.3.RELEASE:repackage failed:
Source must refer to an existing file -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException

怎么解决

  • First Problem
    • 既然出现了问题,那么当然是要解决的。Google一下你就知道。
    • 首先我们知道,打包的时候其实可以忽略Test这一步的,因为当你走到了打包的这一步时,你是能清楚的知道程序本身已经是没多大问题了。所以我们要跳过Maven 多余的Test。其实解决办法很简单,在maven 的pom.xml文件里面加入这几句话就可以了。
1
2
3
4
5
6
7
8
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
  • Second Problem

    • repackage 命令为什么会报错?其实使用spring boot的repackage 命令是需要maven 先clean 然后install 再repackage的。
    • 解决办法很简单,只需要自定义一个Maven Goal
    • step1

    • install spring-boot:repackage

文章到此结束,希望能对大家有所帮助。

参考文章

https://stackoverflow.com/questions/23488093/execution-default-of-goal-org-springframework-bootspring-boot-maven-plugin1-0

http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/maven-plugin/usage.html