在java厂榛、scala的項目開發(fā)中掺涛,我們總是會遇到項目發(fā)布打包的問題大猛,網(wǎng)上大都是介紹將所有的依賴jar打包成一個大的jar包,這樣在增加依賴時诅需,需要更新并上傳一個大的依賴jar(通常都200M了)到集群漾唉,這對于在云服務(wù)或者帶寬很小的集群部署服務(wù)時是很耗時的一個問題荧库,特別隨著項目功能的擴(kuò)展,依賴的第三方j(luò)ar也越來越多赵刑,顯然這并不是我想要的分衫。下面就來介紹利用maven將依賴jar添加到一個統(tǒng)一的lib目錄,并且介紹如何發(fā)布運行般此。
在項目開發(fā)中蚪战,會遇到j(luò)ava代碼和scala代碼混合的情況,所以在maven打包需要分別添加java和scala的打包插件铐懊,再添加copy jar的插件:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>target/lib</outputDirectory>
<excludeTransitive>false</excludeTransitive>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
<!--scala打包插件-->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.3.1</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
<configuration>
<args>
<arg>-dependencyfile</arg>
<arg>${project.build.directory}/.scala_dependencies</arg>
</args>
</configuration>
</execution>
</executions>
</plugin>
<!--java代碼打包插件邀桑,不會將依賴也打包-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</build>
如果需要打包scala的代碼時,需要添加如下依賴:
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.10.6</version>
<scope>provided</scope>
</dependency>
至此科乎,maven的打包插件已經(jīng)配置好壁畸,只需要在idea執(zhí)行maven clear package,如下圖:
如果提示打包成功茅茂,緊接著就可以在項目所在的目錄下捏萍,如圖:
分別將上圖兩個目錄和文件上傳到服務(wù)器,下次如果有更新依賴空闲,只需要在lib中增加或刪除對應(yīng)的jar即可令杈,如果是普通的java、scala程序进副,建議參照: http://www.cnblogs.com/qifengshi/p/6036870.html的打包方式这揣,當(dāng)然也可以繼續(xù)往下看:
1、普通的scala影斑、java項目
for file in ${libs_path}*.jar
do
if test -f $file
then
jars=${jars}:$file
fi
done
if [ "$jars" != "" ]; then
jars=${jars#*:}
fi
echo ${jars}
2给赞、Spark程序發(fā)布
for file in ${libs_path}*.jar
do
if test -f $file
then
jars=${jars},$file
fi
done
if [ "$jars" != "" ]; then
jars=${jars#*,}
fi
echo ${jars}
兩者只有在jar包的分隔符上有區(qū)別。