Maven打包:将config和lib以及jar分开打包(探讨各种打包的区别)
Posted 你是小KS
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Maven打包:将config和lib以及jar分开打包(探讨各种打包的区别)相关的知识,希望对你有一定的参考价值。
1. 声明
当前内容主要为测试和使用Maven打包,将当前的资源文件、maven的lib文件以及生成的jar文件分开来
当前内容为:
- 使用maven打包并分离jar项目中的lib、resources、jar
- 使用springboot打包
- 使用eclipse的export方式打包
- 比较各种的优缺点
2.maven打包配置(将lib、resources、jar分离)
基本的pom
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.hy.apache.commons.test.cli.mysqlConnectionCliTest</mainClass>
</manifest>
<manifestEntries>
<!-- 将config也设置为classpath路径可访问的地方 -->
<Class-Path>config/.</Class-Path>
</manifestEntries>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!-- 放在项目构建的target的里面 -->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>true</filtering>
<!-- 放在项目构建的target的里面 -->
<targetPath>${project.build.directory}/config/</targetPath>
</resource>
</resources>
</build>
maven-dependency-plugin将依赖打成lib包,指定了输出文件的位置
org.apache.maven.plugins,主要是添加启动类,并添加config为classpah查找的位置
resources中主要为指定资源或者配置文件输出的位置为config
2.指定打包后:
此时lib文件和config文件在同一目录下,并且可以执行
3. springboot方式打包
由于当前项目不是一个web项目,所以没有使用springboot的注解,但是使用的是springboot的打包,所以打包后会将当前的资源文件放入在classes中
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.18.RELEASE</version>
</parent>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>com.hy.apache.commons.test.cli.MySQLConnectionCliTest</mainClass>
</configuration>
</plugin>
</plugins>
<resources>
<!-- 加入这一行代码后,当前的打包工作就正常了 -->
<resource>
<directory>resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.tld</include>
</includes>
<filtering>true</filtering>
<!-- <targetPath>${project.build.directory}/config/</targetPath> -->
</resource>
</resources>
</build>
结果为:
虽然可以手动修改并将db.properties设置在外面但是无法得到该配置文件(有的时候需要将lib打到jar里面,且有的时候并不需要web程序,且有的时候需要配置文件在外面)
4.eclipse的默认export方式打包
发现该打包没有任何的lib库,不能执行
5. 比较
依次看来,相同点都是主要的入口类,当前文件的版本
1.maven中的Class-Path
指定了两个位置一个是config/一个是lib,这就是为什么可以找到config文件和lib文件的原因(如果修改这两个位置就可以实现配置文件的修改和库的修改了)
2.SpringBoot中的Spring-Boot-Classes
和Spring-Boot-Lib
分别指向两个不同的地址,且都是指向jar包中的内部的文件的地址(源码发现具有final修饰,所以改动小)
3.本人直觉判断maven的打包和eclipse的export方式的具有共同点
6. 修改eclipse打包的MANIFEST.MF文件(直接添加Class-Path并复制配置文件和lib文件)
使用winrar查看
修改该文件(注意有两个换行)
Manifest-Version: 1.0
Class-Path: config/. lib/commons-cli-1.4.jar lib/mysql-connector-java-5.1.34.jar
Main-Class: com.hy.apache.commons.test.cli.MySQLConnectionCliTest
拷贝对应的config文件和lib文件(或者手动创建也可以)
执行结果:
直接由不可执行变成执行成功(这个表示Class-Path可以指定多个位置,指定为config文件位置可以从类路径上加载配置文件,指定为lib可以从类路径上加载jar文件)
以上是关于Maven打包:将config和lib以及jar分开打包(探讨各种打包的区别)的主要内容,如果未能解决你的问题,请参考以下文章