要记住:spring-boot-maven-plugin插件在打Jar包时会引入依赖包
可以打成直接运行的Jar包
maven项目的pom.xml中,添加了org.springframework.boot:spring-boot-maven-plugin
插件,当运行“mvn package”进行打包时,会打包成一个可以直接运行的 JAR 文件,使用“Java -jar”命令就可以直接运行。
可以引入依赖包
一般的maven项目的打包命令,不会把依赖的jar包也打包进去的,只是会放在jar包的同目录下,能够引用就可以了,但是spring-boot-maven-plugin插件,会将依赖的jar包全部打包进去。比如下面这个jar包的BOOT/INF/lib目录下面就包含了所有依赖的jar包
spring-boot-maven-plugin插件,在很大程度上简化了应用的部署,只需要安装了 JRE 就可以运行。
但是俺测试发现它的一个缺点,就是它打包成的这个jar包,在被别的项目引用的时候,会出问题。如果没有这个插件打包的话,那么它的目录结构是:
比较这两次打包的区别:在使用spring-boot-maven-plugin插件时,打包后的目录包括三个,BOOT-INF,META-INF,org.springframework.boot.loader,在lib目录里包含了我自己的项目的代码目录;
在没有使用spring-boot-maven-plugin插件时,打包的目录只有两个,META-INF和我自己的项目代码的目录。
可以指定默认执行类
如果使用插件,不指定子目录的话,它的默认执行的类是
Main-Class: org.springframework.boot.loader.JarLauncher
如果使用spring-boot-maven-plugin插件还想要自定义执行的类的话,可以用下面三个方法:(前两个未验证,应该没问题)
1、如果POM继承spring-boot-starter-parent
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.2.RELEASE</version> <relativePath/> </parent> <properties> <!-- The main class to start by executing java -jar --> <start-class>com.mycorp.starter.HelloWorldApplication</start-class> </properties>
2、如果你的POM不是继承spring-boot-starter-parent的话,需要下面的指定。
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>1.3.5.RELEASE</version> <configuration> <mainClass>${start-class}</mainClass> <layout>ZIP</layout> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
3、POM不是继承spring-boot-starter-paren,并且使用maven-jar-plugin插件来指定执行的类
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <useUniqueVersions>false</useUniqueVersions> <classpathPrefix>lib/</classpathPrefix> <mainClass>cn.com.dataocean.ddts.cli.DDTSCliApplication</mainClass> </manifest> <manifestEntries> <version>${project.version}</version> <!--<Class-Path>/home/jiashubing/myfile/ddts/cli/plugins/ddts.core-0.0.1-SNAPSHOT.jar</Class-Path>--> </manifestEntries> </archive> </configuration> </plugin>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍Jenkins插件pipeline原理及使用方法解析,包括了Jenkins插件pipeline原理及使用方法解析的使用技巧和注意事项,需要的朋友参考一下 摘要: pipeline字面意思就是流水线,将很多步骤按顺序排列好,做完一个执行下一个。下面简单介绍下如何使用该插件帮我们完成一些流水线型的任务 pipeline字面意思就是流水线,将很多步骤按顺序排列好,做完一个执行下一个。下面简
我知道如何禁用按钮,以防止它被点击两次。然而,如果我想再次启用它,只要它安全,我可以做类似的事情,我调用setenabled(true)在onclick??是一调用setenabled(false)就禁用按钮,还是只在onclick函数完成时禁用?
本文向大家介绍简述 Mybatis 的插件运行原理,以及如何编写一个插件相关面试题,主要包含被问及简述 Mybatis 的插件运行原理,以及如何编写一个插件时的应答技巧和注意事项,需要的朋友参考一下 答:Mybatis 仅可以编写针对 ParameterHandler、ResultSetHandler、StatementHandler、Executor 这 4 种接口的插件,Mybatis 使用
Xwindow 使用服务器-客户端架构。无论本地图形界面,还是远程图形界面,都以同样的流程工作。这样便不需要分别进行设计和维护。 本地X客户端 ┐ ┌ 键盘 远程X客户端 ┼ X协议 ─ X服务器 ─ 驱动程序┼ 鼠标 远程X客户端 ┘ └ 显示器 Xserver Xwindow 系统服务器端,通过驱动程序(硬件规范)来管理硬件资源。 例如:当我们移动鼠标时,通过驱动程序[窗口
本文向大家介绍Django路由层URLconf作用及原理解析,包括了Django路由层URLconf作用及原理解析的使用技巧和注意事项,需要的朋友参考一下 一、Django中路由的作用 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。 你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码。
初学 Python 时可能不适应需要手动注释文件编码的写法,根据 PEP 263 所定义, 必须在 Python 文件的前两行,按照下面的写法注明文件的编码: # coding=<encoding name> 或者: # -*- coding: <encoding name> -*- 或者: # vim: set fileencoding=<encoding name> : 如果不定义文件的
本文向大家介绍AJAX工作原理及优缺点详解,包括了AJAX工作原理及优缺点详解的使用技巧和注意事项,需要的朋友参考一下 AJAX 是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。 一、ajax所包含的技术 大家都知道ajax并非一种新的技术,而是几种原有技术的结合体。它由下列技
本文向大家介绍Java操作Zookeeper原理及过程详解,包括了Java操作Zookeeper原理及过程详解的使用技巧和注意事项,需要的朋友参考一下 ZooKeeper 是一个典型的分布式数据一致性解决方案,分布式应用程序可以基于 ZooKeeper 实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master 选举、分布式锁和分布式队列等功能。 Zookeeper 一个