java scala maven_通过 Maven 编译打包 Java + Scala 混合项目

1 - 问题描述

1.1 背景说明

项目中需要对 Java + Scala 编写的 Maven 项目进行编译打包,由于依赖了部分外部 jar 包,也就是部分 jar 包没有在 pom.xml 中指定,导致编译失败。

1.2 存在的问题

网络上能比较常见的打包 Scals 项目的方法,大多是引入了 org.scala-tools.maven-scala-plugin 插件(https://mvnrepository.com/artifact/org.scala-tools/maven-scala-plugin),其配置方式如下:

org.scala-tools

maven-scala-plugin

2.15.2

modified-only

main-scalac

process-resources

add-source

compile

该插件从2011年起就没有更新过,官网地址也已失效,无法找到有效的支持文档。

2 - 问题解决

2.1 方法一:通过scope=system引入外部依赖

Maven 支持在 dependency 中引入系统依赖,其中 scope = system 与 scope = provided 的依赖范围一致:只在编译和测试范围内有效,运行时范围内无效。具体配置示例如下:

com.shoufeng.bigdata

spark-client

system

${project.basedir}/libs/spark-client.jar

将所有的外部 jar 包都通过这种方式引入,即可正常编译。但由于外部依赖包通常都会比较多,这种方式维护成本太高,所以不予考虑。

2.2 方法二:通过新插件指定外部依赖

net.alchim31.maven

scala-maven-plugin

3.2.1

scala-compile-first

process-resources

add-source

compile

scala-test-compile

process-test-resources

add-source

testCompile

-extdirs

${project.basedir}/libs

2.11.8

通过 -extdirs 参数,指定外部依赖的 jar 包。

其他参数的查看:在终端窗口中,通过命令 mvn scala:help 查看主要配置项参数,例如:

java scala maven_通过 Maven 编译打包 Java + Scala 混合项目_第1张图片

编译、打包用法:

(1) 直接在 IDEA 的 Maven -> Project -> Lifecucle -> compile | package 进行编译或打包;

(2) 在终端窗口,通过如下命令进行编译打包:

mvn clean scala:compile compile package

说明:在 compile 前加 scala:compile,这是该插件提供的选项,表示:先编译 Scala,再编译 Java,最后打包。

你可能感兴趣的:(java,scala,maven)