前言
目前常用的项目管理工具大概包括maven、sbt、gradle几种,这几种工具在使用时往往会遇到一种常见的场景,就是需要把工程依赖的jar包导出或打成一个包,下面来总结这几种工具如何实现依赖打包。
maven
- 打成一个包,即依赖多少jar都统统解压为.class等内容,与项目自身的class打成一个包
在pom中写入如下内容,注意如果已经有build以及plugins配置的话别覆盖错了
<build>
<finalName>输出最终名次</finalName>
<defaultGoal>compile</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer" />
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
- 将全部jar输出到一个lib目录中,有点像tomcat WEB_INF/lib的方式
在plugins里增加如下内容就行
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
</execution>
</executions>
<configuration>
<excludeTransitive>false</excludeTransitive>
<stripVersion>false</stripVersion>
<includeTypes>jar</includeTypes>
<overWriteSnapshots>true</overWriteSnapshots>
<type>jar</type>
<excludeScope>system</excludeScope>
<!-->这是输出的路径<--->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
</configuration>
</plugin>
maven的配置方式还是比较简单的,但是部分版本可能不一样,不过一般都能成功。
gradle
- 打成一个包
build.gradle里写入
jar{
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
}
- 将依赖输出到lib
jar {
task dist(dependsOn: 'assemble', type: Copy) {
from configurations.runtime
from jar
include "**/*.jar"
into "${buildDir}/lib"
}
}
gradle还行,不过配置方法比较多一些,不一定是这几个
sbt
相比前两个sbt的方法最不稳定
先看如何把依赖输出到目录
project下添加plugins.sbt文件,如果有的话可以直接追加,写入如下内容
addSbtPlugin("org.xerial.sbt" % "sbt-pack" % "0.12")
build.sbt中写入
enablePlugins(PackPlugin)
打包使用命令
sbt pack
就能输出依赖jar了