最近在研究docker,要打包一個可以獨立執行的jar包,於是研究了很久,對於maven plugin還未深入研究,之後會再次補充此文章,先簡單介紹一下常用的幾種plugin和適用情況
項目說明
- spring framework
- spring boot
plugin 介紹
spring-boot-maven-plugin
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
主要用於運行maven管理的spring-boot應用運行,cmd: mvn spring-boot:run;
* 另外,使用以下方式指定spring-boot-starter-parent,運行mvn package可以打包爲可執行jar包,同時生成.origin結尾的工具包 *
<!--這裏不能使用dependencyManagement的方式,會導致compiler不能正確使用jdk-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.5.RELEASE</version>
<relativePath/>
</parent>
maven compiler plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
作用是打包jar包,指定jdk版本等信息
docker-maven-plugin
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- tag::plugin[] -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.3</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
<!-- end::plugin[] -->
</plugins>
</build>
imageName指定了鏡像的名字,本例爲 waylau/docker-spring-boot
dockerDirectory指定 Dockerfile 的位置
resources是指那些需要和 Dockerfile 放在一起,在構建鏡像時使用的文件,一般應用 jar 包需要納入。本例,只需一個 jar 文件。
這個工具主要用來打包jar包同時生成docker的image,需要配合spring-boot-maven-plugin使用
maven-jar-plugin
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>com.**.**</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
這個插件的作用是用來修改生成的清單文件 MANIFEST.MF,這個文件是jar包執行所必須的,但是僅使用該plugin則僅僅是在清單文件中添加了mainclass 和classpath,指定的lib目錄實際爲/target目錄下的,所以需要在程序主目錄下運行
mvn dependency:copy-dependencies -DoutputDirectory=target/lib
將所有的依賴jar打包到target/lib下面,這樣jar包可以運行了,但必須和lib目錄放在一個文件夾下面。
以下兩個工具各有所長,不再介紹,對於spring boot的項目,僅需要一個spring-boot-maven-plugin就足夠了,但是對於非spring-boot項目,需要結合多個plugin進行配置