maven插件之构建可执行的jar入门

 1.因为现在很多服务不在用笨重的web容器进行启动,只需要使用自身带的容器就可以将服务启动起来,在服务器部署上不需要再单独布置web应用来增加服务器的额外开销,只需要直接启动jar包就可以将服务启动起来,比较方便。现在比较经典的框架比如Spring家族系列,Spring就自身带有Spring容器,就可以独自加载配置,还有阿里巴巴的Dubbo框架,内部集成多个容器,比如Spring容器log4j容器和logback容器等,根本不需要再再额外的提供容器来增加开销,只需要打成jar包,直接执行命令(java -jar xxx.jar)就可以将项目运行起来,当然构建项目得提供一个入口的main方法,这样执行命令的时候程序才会去根据配置去寻找入口地址,有兴趣的可以看看dubbo的源码和springboot的源码,这两个框架都是直接启动并且内部集成了多个容器。

2.可执行jar的构建

--这节给大家介绍一点自己构建可执行jar项目的总结,当时走了很多弯路,当时各种百度,google都没有找到我想要的东西。因为不是把项目打成jar就能执行的,即使里面有main方法,在执行java -jar xxx.jar的时候也不一定可以找到,就算找到了,也不一定执行正确,因为在配置的时候,我们需要一些列的配置来让项目在进行打包操作时候生成可以让其jar包正确执行的配置文件和编译文件需要放置的哪个目录下,还有就是main方法的入口配置,执行java命令的时候,他去哪里找mian方法我们也得自己去配置,还有就是项目中的配置文件需要在打包时,打到哪里等等,这些都是我们要考虑的问题,只有将这些问题全部考虑到了之后,在打包之后,执行java -jar xxx.jar才会正确的执行jar

--通过构建一个最简单的HelloWolrd!例子来理解可执行jar文件。

1.在eclipse上构建一个maven项目,我就直接取名HelloWorld,名字你们任意取。注意不是web项目,因为web项目最后打成是一个war包,我们需要jar包,所以只需要构建一个普通的java项目。

2.打开项目的pom文件我们先将里面的junit依赖的版本修改成4.11,因为3.X的版本不支持注解,虽然项目中我们没有用到测试但是,我本人习惯。

3.我们只是构建一个最简单的项目来解说可执行jar包的构建方法。

4.我们建一个包路径com.java,建一个测试类我给取名为TestMain,你们这些都可以随便取,根据自己喜好。

5.TestMain类里面只有一个mian方法

public class TestMain {
	public static void main(String[] args) {
		System.out.println("HelloWorld!!!!!");
	}
	
}

 6.我们先什么都不配置直接打成jar包,然后执行一下试试,看看能否输出HelloWorld!!!!!

 

7.maven的打包命令:mvn clean install -Dmaven.test.skip=true 注意:这条命令必须在项目目录下的pom文件的所在目录下执行,这个大家都应该知道吧。

 

8.编译之后再当前目录的target目录下会生成一个HelloWorld-0.0.1-SNAPSHOT.jar文件(这是我的jar文件,你要是取的项目名不是helloworld那就是别的名字),大家也都知道编译之后所生成的jar包在哪里吧,我就不说了,进入所生成的jar包的文件目录下,执行java -jar HelloWorld-0.0.1-SNAPSHOT.jar  不出意外的话会报错:HelloWorld-0.0.1-SNAPSHOT.jar中没有主清单属性   ,然后你们把这个错误粘贴到网上会看见各种大神给你们解答,结果好像都是一样的答案,具体说的行不行我也没有验证,因为我觉得不靠谱,我项目里面要是几十个jar包相互依赖,我还得一个个往他们所说的那个MANIFEST.MF文件里面加,那不是得疯了,再说完事之后好不好用还两说,所以我就没用,其实maven提供了更友好的方式,这么大的漏洞maven怎么可能出现呢。

9.HelloWorld-0.0.1-SNAPSHOT.jar中没有主清单属性:这个错误是什么意思呢?字面意思,没有主类的清单,也就是说找不到主类,执行jar的时候要有执行的入口,所以他找不到,才会报错 ,我们要给他提供主类的入口。所以我们在打包之前要对maven的打包命令的插件进行配置,让他标记jar,并且记录主类的地址,这pom文件中添加下面的插件,插件介绍参见官方地址:http://maven.apache.org/plugins/maven-jar-plugin/

<plugin>
	<groupId>org.apache.maven.plugins</groupId>
		<artifactId>maven-jar-plugin</artifactId>
			<configuration>
				<archive>
					<manifest>
                                        <!-- 定义主类的入口地址就是TestMain的全路径-->
					    <mainClass>
                                                com.java.TestMain
                                            </mainClass>
					</manifest>
				</archive>
			</configuration>
</plugin>

10.添加之后再执行打包命令:mvn clean install -Dmaven.test.skip=true

11.打包成功之后再进入target目录下执行命令:java -jar HelloWorld-0.0.1-SNAPSHOT.jar   就会在控制台打出:HelloWorld!!!!!

12.※上面只是一个最简单的配置,进入上面提供的网址可以找到这个插件的所有配置,如果这个项目里面还有很多依赖的第三方jar你就要配置插件在打包时候将涉及到的第三方jar打到制定的目录下和将这些jar包标记到MANIFEST.MF里面

 

--总结

 

1.就是一个简单的插件使用,但是在网上很少看见对maven插件的解释,因为我们平时很少去构建项目,特别是构建大型的项目,我第一次构建这种可执行jar项目的时候也一脸懵逼,无从下手,网上乱搜,发现网上全是坑,后来也就放弃了,看他们的还不如自己找答案。正好现在有两个典型的jar运行项目的框架,一个是springboot,还有一个就是做分布式开发的dubbo框架,也是比较幸运,我做了一年多的dubbo开发,对dubbo比较熟悉,源码也大略的看过几遍,所以就查找dubbo的pom文件,首先就是dubbo的容器所在的pom文件,然后看他的父项目pom文件,还真查到了maven-jar-plugin插件,然后在网上查,进入官网,终于知道这个插件就是我想要的,再根据dubbo的容器启动配置,所以知道了这个插件的大概用法,就是构建可执行jar的必须插件,还有其他几个也是构建可执行jar的必须插件,只是方向不同,这个是打包jar和配置执行main方法入口的。

2.另一个执行jar的就是springboot他我也看了一下源码,看了一下他的pom文件下的插件配置,只是springboot的这个插件进行了包装 spring-boot-maven-plugin 建springboot项目时,只要加这个依赖就可以了,打包的时候自然会直接变成可执行的jar

3.但是不管怎么样,最后结果都是一样的。希望对你们有所帮助。

格式格式化的不好,看着不是很方便,请下载附件。

 

相关推荐