🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 11.5. 创建一个可执行jar 让我们通过创建一个完全自包含,并可以在生产环境运行的可执行jar来结束示例吧!可执行jars(有时被称为胖jars "fat jars")是包含编译后的类及代码运行所需依赖jar的存档。 **可执行jars和Java**:Java没有提供任何标准方式,用于加载内嵌jar文件(即jar文件中还包含jar文件),这对分发自包含应用来说是个问题。为了解决该问题,很多开发者采用"共享的"jars。共享的jar只是简单地将所有jars的类打包进一个单独的存档,这种方式存在的问题是,很难区分应用程序中使用了哪些库。在多个jars中如果存在相同的文件名(但内容不一样)也会是一个问题。Spring Boot采取一个[不同的方式](https://github.com/cwiki-us-spring-guides/Spring-Boot-Reference-Guide/tree/0047aa8098a650dde0c93f4d2e91754c83468c4b/X.%20Appendices/D.%20The%20executable%20jar%20format.md),允许你真正的直接内嵌jars。 为了创建可执行的jar,我们需要将`spring-boot-maven-plugin`添加到`pom.xml`中,在dependencies节点后面插入以下内容: ```markup <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> ``` **注**:`spring-boot-starter-parent` POM包含绑定到repackage目标的`<executions>`配置。如果不使用parent POM,你需要自己声明该配置,具体参考[插件文档](http://docs.spring.io/spring-boot/docs/1.4.1.BUILD-SNAPSHOT/maven-plugin/usage.html)。 保存`pom.xml`,并从命令行运行`mvn package`: ```text $ mvn package [INFO] Scanning for projects... [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building myproject 0.0.1-SNAPSHOT [INFO] ------------------------------------------------------------------------ [INFO] .... .. [INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ myproject --- [INFO] Building jar: /Users/developer/example/spring-boot-example/target/myproject-0.0.1-SNAPSHOT.jar [INFO] [INFO] --- spring-boot-maven-plugin:1.4.1.BUILD-SNAPSHOT:repackage (default) @ myproject --- [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------ ``` 如果查看target目录,你应该可以看到`myproject-0.0.1-SNAPSHOT.jar`,该文件大概有10Mb。想查看内部结构,可以运行`jar tvf`: ```text $ jar tvf target/myproject-0.0.1-SNAPSHOT.jar ``` 在该目录下,你应该还能看到一个很小的名为`myproject-0.0.1-SNAPSHOT.jar.original`的文件,这是在Spring Boot重新打包前,Maven创建的原始jar文件。 可以使用`java -jar`命令运行该应用程序: ```text $ java -jar target/myproject-0.0.1-SNAPSHOT.jar . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / / =========|_|==============|___/=/_/_/_/ :: Spring Boot :: (v1.3.0.BUILD-SNAPSHOT) ....... . . . ....... . . . (log output here) ....... . . . ........ Started Example in 2.536 seconds (JVM running for 2.864) ``` 如上所述,点击`ctrl-c`可以温雅地退出应用。