默认的情况下,当直接执行maven项目的编译命令时,对于结果来说是不打第三方包的,只有一个单独的代码jar,想要打一个包含其他资源的完整包就需要用到maven编译插件,使用时分以下几种情况。
需要明白,下面罗列的这几种是一般情况下够用了,但确实会有一些比较刁钻的少数情况,就需要灵活使用,如果大家在使用过程中遇到这方面的情况,欢迎私信我交流一下
第一种:当只是想单纯的开发一个maven项目,不涉及其他复杂的项目结构,最后只需要一个全部资源可执行jar,就用如下插件pom
<build>
<plugins>
<!-- Maven Assembly Plugin 是maven官方的编译打包插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<!-- 插件的配置参数相关-->
<configuration>
<!-- 当你在打可执行包,也就是结果包是一个jar时,可以指定主类,不需要主类时无需写archive-->
<archive>
<manifest>
<mainClass>com.yourpackage.MainClass</mainClass>
</manifest>
</archive>
<!-- 这里需要给一个结果包的后缀,用来区分-->
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<!-- 插件的执行阶段定义,可以有多个,不过一般一个打包的就够了 -->
<executions>
<execution>
<!-- 这个id是自定的,保证有多个执行阶段的时候是唯一的就行 -->
<id>make-assembly</id>
<!-- 这个执行阶段在maven的那个阶段生效,这里绑定在打包时生效 -->
<phase>package</phase>
<!-- 这个single是固定的不用变,意思是根据给定的或者默认的配置来执行编译,默认时是打当前项目的所有dependencies为一个完整包,这个参数不要过多纠结官方文档中也只有这个,你要能力够可以自己封装 -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
打包后项目的输出路径下,除了原本的最小jar外,会有一个包名包含jar-with-dependencies的jar

第二种:assembly是一个比较好用的编译插件,无论是单独打jar,还是整个项目打归档类的包,都能胜任,不过早些年ssm那个时代,Java常用的编译插件是compiler,这个插件现在也有人用,不过它在打包的时候常常出问题,所以用它来打jar包的话,保险起见要指定resources。同时它只能用来编译,打jar包是配合另外一个插件。在ssm这种web开发使用到的比较多,而 Spring boot之后官方提供了自己的编译插件,再加上它没有assembly那么好用,所以现在用的不多
<build>
<plugins>
<!-- maven在进行一些编译操作所使用的默认插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<!-- maven默认的打包插件 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<archive>
<manifest>
<!-- 指定主类,如果你只是一个资源类的项目,不需要主类,就无需写archive标签 -->
<mainClass>com.example.MainApplication</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<!-- resources默认指向java和resources目录,但是早期的SSM它的mapper文件可以写在java源代码路径下,因此需要重写resources标签 -->
<resources>
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory><!--所在的目录-->
<includes>
<include>**/*.xml</include>
<include>**/*.properties</include>
</includes
Maven项目中的插件使用:依赖打包与Java/Scala混合编译

最低0.47元/天 解锁文章
2253

被折叠的 条评论
为什么被折叠?



