在java、scala的项目开发中,我们总是会遇到项目发布打包的问题,网上大都是介绍将所有的依赖jar打包成一个大的jar包,这样在增加依赖时,需要更新并上传一个大的依赖jar(通常都200M了)到集群,这对于在云服务或者带宽很小的集群部署服务时是很耗时的一个问题,特别随着项目功能的扩展,依赖的第三方jar也越来越多,显然这并不是我想要的。下面就来介绍利用maven将依赖jar添加到一个统一的lib目录,并且介绍如何发布运行。
在项目开发中,会遇到java代码和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的打包插件已经配置好,只需要在idea执行maven clear package,如下图:
KAG)6J_O6HTZLAS6)5ZR~NV.png如果提示打包成功,紧接着就可以在项目所在的目录下,如图: @1{Z7{VBLFDSM%B30T0YK7P.png
分别将上图两个目录和文件上传到服务器,下次如果有更新依赖,只需要在lib中增加或删除对应的jar即可,如果是普通的java、scala程序,建议参照: http://www.cnblogs.com/qifengshi/p/6036870.html的打包方式,当然也可以继续往下看:
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程序发布
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包的分隔符上有区别。
网友评论