maven生成可执行jar包

项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步

maven有两种生成可执行jar包的插件,能够自动加载依赖包。现在我们就针对这两种插件来分别说明。

1.maven-assembly-plugin

为了简单方便,利用maven的assembly插件将依赖的jar包都打包到一个jar中。这样无论拷贝到哪里,直接运行即可,不需要修改任何配置与代码。

看一个assembly的使用实例:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                    <!--绑定到package的生命周期上 -->
                        <phase>package</phase>
                        <goals>
                            <goal>attached</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>

assembly的配置项非常多,这里只用了很简单的几个,具体配置可以查阅相关文档。

2.appassembler-maven-plugin

appassembler-maven-plugin 的优势是能够自动生成window和linux的启动脚本,省去了自己再另写一个脚本的时间。而前面maven-assembly-plugin 生成jar包后需要执行 java -jar **.jar命令运行jar包。
同样看一个实例

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.1.1</version>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
	                <!-- 配置文件的目标目录 -->
                    <configurationDirectory>conf</configurationDirectory>
                    <!-- 从哪里拷贝配置文件 (默认src/main/config) -->
                    <configurationSourceDirectory>conf</configurationSourceDirectory>
                    <!-- 拷贝配置文件到上面的目录中 -->
                    <copyConfigurationDirectory>true</copyConfigurationDirectory>
                    <includeConfigurationDirectoryInClasspath>true</includeConfigurationDirectoryInClasspath>
					<!-- lib目录中jar的存放规则,默认是${groupId}/${artifactId}的目录格式,flat表示直接把jar放到lib目录 -->
                    <repositoryLayout>flat</repositoryLayout>
                    <!-- 打包的jar,以及maven依赖的jar放到这个目录里面 -->
	                <repositoryName>lib</repositoryName>       
	                <!-- 根目录 -->
	                <assembleDirectory>${project.build.directory}/${project.artifactId}-${project.version}</assembleDirectory>

                    <binFileExtensions>
                        <unix>.sh</unix>
                    </binFileExtensions>
                    <platforms>
                    <!-- 生成linux平台的执行脚本 -->
                        <platform>unix</platform>
                    </platforms>

                    <extraJvmArguments>
                        -Xmx8000m
                        -Djava.security.krb5.conf=$BASEDIR/conf/krb5.conf
                        -Dhadoop.property.hadoop.client.keytab.file=$BASEDIR/conf/h_message_push.keytab
                        -Dhadoop.property.hadoop.client.kerberos.principal=h_message_push@XIAOMI.HADOOP
                        -Dhadoop.property.hadoop.security.authentication=kerberos
                    </extraJvmArguments>
                    <programs>
                        <program>
                            <mainClass>XXX</mainClass>
                            <name>XXXXX</name>
                        </program>
                    </programs>
                </configuration>
            </plugin>

如同前面提到的,在pom里面添加appassembler-maven-plugin打包完成以后,会自动生成一个bin目录,bin里面就包含有运行XXX主类的.sh脚本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值