maven学习系列7----将依赖依赖文件打包到jar中
来源:互联网 发布:js屏幕图片自动旋转 编辑:程序博客网 时间:2024/05/18 02:58
在发布项目的时候有可能会有这样的要求,一个jar包中即包含自研的代码,也包含依赖的库(例如log4j的jar包之后的),maven打包的时候有两种方法可以实现这种要求。
1,使用maven-assembly-plugin插件
pom.xml配置如下
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.7</source>
- <target>1.7</target>
- <encoding>${project.build.sourceEncoding}</encoding>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-assembly-plugin</artifactId>
- <configuration>
- <descriptorRefs>
- <descriptorRef>jar-with-dependencies</descriptorRef>
- </descriptorRefs>
- <archive>
- <manifest>
- <mainClass>com.itsenlin.Helloworld</mainClass>
- </manifest>
- </archive>
- </configuration>
- <executions>
- <execution>
- <id>make-assembly</id> <!-- this is used for inheritance merges -->
- <phase>package</phase> <!-- bind to the packaging phase -->
- <goals>
- <goal>single</goal>
- </goals>
- </execution>
- </executions>
- </plugin>
- </plugins>
- lt;/build>
说明:
- 1,assembly插件功能强大,不仅可以打jar包还可以打zip、war各种包。
- 2,打的jar包名会以-with-dependencies结尾
- 3,这种方式打的jar包中,是将依赖包的classes文件与本项目的classes文件放在一起打成jar包的,如下图所示(com目录是项目代码的classes文件,org目录是引入了org.apache.log4j构件的classes目录,如果依赖其他构件也有可能有其他的classes文件的目录)
2,将依赖的jar包拷贝到target/classes目录下
因为maven默认是将target/classes目录下所有文件打成jar包,所以我们可以配置在编译的时候将依赖的构件拷贝到target/classes目录下,注意这种方法需要配置classpath。pom.xml配置如下:
- <build>
- <plugins>
- <plugin>
- <artifactId>maven-compiler-plugin</artifactId>
- <configuration>
- <source>1.7</source>
- <target>1.7</target>
- <encoding>${project.build.sourceEncoding}</encoding>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-jar-plugin</artifactId>
- <configuration>
- <archive>
- <manifest>
- <!-- 告知 maven-jar-plugin添加一个 Class-Path元素到 MANIFEST.MF文件,以及在Class-Path元素中包括所有依赖项 -->
- <addClasspath>true</addClasspath>
- <!-- 所有的依赖项应该位于 lib文件夹 -->
- <classpathPrefix>lib/</classpathPrefix> </span>
- <!-- 当用户使用 lib命令执行JAR文件时,使用该元素定义将要执行的类名 -->
- <mainClass>com.itsenlin.Helloworld</mainClass>
- </manifest>
- </archive>
- </configuration>
- </plugin>
- <plugin>
- <artifactId>maven-dependency-plugin</artifactId>
- <executions>
- <execution>
- <id>copy-dependencies</id>
- <phase>prepare-package</phase>
- <goals>
- <goal>copy-dependencies</goal>
- </goals>
- <configuration>
- <!-- ${project.build.directory}为Maven内置变量,缺省为target -->
- <outputDirectory>${project.build.directory}/classes/lib</outputDirectory></strong></span>
- <!-- 表示是否不包含间接依赖的包 -->
- <excludeTransitive>false</excludeTransitive>
- <!-- 表示复制的jar文件去掉版本信息 -->
- <stripVersion>true</stripVersion>
- </configuration>
- </execution>
- </executions>
- </plugin>
- </plugins>
- </build>
- 1,这种方法与不把依赖打到jar包内的配置区别就是拷贝依赖包的位置有变化,见上面红色部分
- 2,jar包解压之后如下图所示
- 3,这种方式目前测试中发现一个不太好的地方,就是会把scope为test的包也拷贝到jar包中,虽然对功能无影响,但是会增加整个jar包的大小,并且增加了无用的jar包,如下图中的junit,目前还没找到原因,找到原因之后再增加相关内容(有知道的兄弟也可告知一下,谢谢:))。
参考:
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html#Resources
阅读全文
0 0
- maven学习系列7----将依赖依赖文件打包到jar中
- maven学习系列7----将依赖依赖文件打包到jar中
- 使用maven的maven-assembly-plugin将jar包依赖打包到一个jar文件中
- 使用maven的maven-assembly-plugin将jar包依赖打包到一个jar文件
- 一段实用的maven pom:将项目依赖打包到文件夹或打入jar中
- maven 将依赖jar包打包
- Maven 将依赖打包到lib
- Maven把所有依赖的jar打包到一个jar中(相当于fat jar)
- 使用Maven将所有的依赖打包到一个jar里
- maven项目常用技巧:将依赖打包到文件夹并生产可执行的jar
- maven学习系列8----将resources目录下的文件打包到jar包外
- maven 拷贝依赖jar到 lib中
- maven将java项目中依赖的jar包合并到最终的jar中
- 使用Maven Assembly plugin将依赖打包进jar
- 使用Maven Assembly plugin将依赖打包进jar
- maven打包时候将依赖jar包打入
- maven 打包时复制依赖的jar到指定的文件
- Maven打包Spring boot,把依赖和配置文件及前端代码提取到jar文件外
- Activemq几种基本通信方式总结
- LINUX vfork
- 替换矩阵的一部分
- linux下screen使用,端口检测, 进程查看,隐藏文件显示
- C语言 文件操作
- maven学习系列7----将依赖依赖文件打包到jar中
- 股票涨跌预测方法之三:建立模型并训练
- HTTP错误 403.14-Forbidden
- LeetCode----406(M)、392(M)
- 使用maven搭建XML风格的Spring MVC+WebSocket+sockjs+STOMP+ActiveMQ应用
- 在shell中对多条记录去重
- 手势解锁
- XSS和CSRF
- 度量学习与聚类