本文仅讨论使用Maven+Scala项目打包可执行Jar从而使用spark-submit提交执行
打包的几种形式
1 | ✖ | ✖ | 常用于制作类库或工具等,我们使用Maven引入的第三方Jar大都是此类 |
2 | ✔ | ✖ | 用于制作可执行程序,可通过Java命令启动,但是程序本身不包含依赖,多以lib目录等存放依赖,同时在主程序中标记引用关系,一般都是相对位置。主程序一般体积很小,在不改变依赖引用的情况下修改主程序可用更小的网络资源完成传输 |
3 | ✔ | ✔ | 将主程序和所有依赖类库全部打包到一个jar中,与上面的方式相比没有相对依赖库的限制,但是整体体积较大,传输不便 |
4 | ✖ | ✔ | 用于多个类库的整合封装,如多个Maven子项目合为一个类库 |
在这几种方式中,结合自身使用场景挑选合适的即可,下面我们以编写Scala程序在Spark中运行为场景来了解下 2
,3
两种打包方式的具体做法
1. Maven打包说明
Maven的组件功能通过在pom.xml
中声明配置对应的<plugin>
来实现,基本Maven目录树为
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--项目自身GAV-->
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
<!--你依赖的类库-->
<dependencies>
<dependency>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
</dependency>
</dependencies>
<!--编译/构建相关插件和配置-->
<build>
<plugins>
<plugin>
<groupId>xxx</groupId>
<artifactId>xxx</artifactId>
<version>xxx</version>
</plugin>
</plugins>
</build>
</project>
我们实现不同的打包方式都通过在<build>
节点添加插件实现
首先我们添加Scala的支持:
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<id>scala-compile-first</id>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<includes>
<include>**/*.scala</include>
</includes>
</configuration>
</execution>
<execution>
<id>scala-test-compile</id>
<goals>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
2. Maven打包不包含依赖的Scala可执行Jar配置
加入主类声明插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix><!--声明主类使用类库的相对目录名称-->
<mainClass>你的主类全路径(com.xxx.Xxx)</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
依赖类库复制插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<!--${project.build.directory}是项目构建完成后的根目录,可执行的Jar在此目录-->
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
3. Maven打包包含依赖的Scala可执行Jar配置
添加拷贝依赖到可执行Jar的插件:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.altamob.LogicLauncher</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
4. 执行打包动作
mvn clean package -T 1C -Dmaven.test.skip=true -Dmaven.compile.fork=true
上面的命令中加入了并行编译提高打包速度,同时跳过了测试
作者:怒放的葱花
链接:https://www.jianshu.com/p/279bcf76039b
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
相关推荐
第三步 给Scala项目注入maven依赖 将Scala 项目 转为 Maven 项目 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...
该项目将"org.scala-lang" % "scala-dist" % $version Maven工件变形为Scala $version发行$version (zip,tar.gz,deb,rpm和msi)。 要构建发行版,请运行: universal:packageBin构建通用zip安装程序 universal...
包中构建了Java以及Scala混合框架的maven打包框架以及关于spark core,spark sql 、spark streaming的一些典型案例或者算子使用。
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...
基于SpringBoot+Mybatis+Vue+Python+Scrapy+Spark+Scala协同过滤算法的新闻推荐系统的设计与实现+详细文档+全部资料(高分项目)数据爬虫使用Python+Scrapy框架,大数据推荐功能使用Spark+Scala实现协同过滤算法,...
Flatten Maven插件 生产发布 开发发布 安装 相似的插件 插件功能 取代公开的身份 ... Scala Identity flatten:flatten pom.xml.flatten生成部署pom.xml.flatten mvn clean package -P flatten < profile>
IDEA常用操作文档集合,包括:常用快捷键、导入Jar包快捷键、如何使用Maven打包部署项目、使用Maven打jar包、安装Scala插件、使用Git等等。
只要安装了它,就可以运行以下命令来打包 JAR 并将它们安装到本地 Maven 存储库中: sbt clean publish包括如果您在本地发布此库,则可以将其包含在任何 Maven 项目中,如下所示: <dependency> <groupId>...
打包 $ mvn clean package -Dlatest.scala.version=2.13.0-M1 -Dmaven.compiler.plugin.source=1.8 -Dmaven.compiler.plugin.target=1.8 -Dmaven.assembly.plugin.version=3.0.0 Fat Jar 执行 执行 POM 中提到的
Eduonix Java 构建工具 ANT_BASIC 概述了如何使用 ANT 构建编译和打包 Java ...概述如何使用 maven 构建和编译 scala 应用程序 GRADLE_ADVANCED 高级使用 Gradle 为 Android 构建 JavaFX 应用程序 jfxmobile-plugin
它带有预定义的目标,用于执行某些明确定义的任务,例如代码编译及其打包。 Maven 从一个或多个存储库(例如 Maven 2 中央存储库)动态下载 Java 库和 Maven 插件,并将它们存储在本地缓存中。[4] 下载工件的本地...
使用Eclipse打包自己的MapReduce程序 51 不用Hadoop-Eclipse-Plugin编写MapReduce程序 54 Hadoop集群安装配置教程 56 HBase安装 56 HBase伪分布式配置 57 HBase Shell编程实践 60 HBase JAVA API编程实践 64 ...
Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。...
使用 Docker 和 Google Container Engine 打包和部署应用程序和集群。 该应用程序是用 Java 而不是 Scala 编写的,并使用 Spring 进行依赖注入。 构建并部署到 Google Container Engine 启动一个具有足够节点的 ...
内容概要:由于cdh6.3.2的spark版本为2.4.0,并且spark-sql被阉割,现基于cdh6.3.2,scala2.12.0,java1.8,maven3.6.3,,对spark-3.2.2源码进行编译 应用:该资源可用于cdh6.3.2集群配置spark客户端,用于spark-sql
,打包为OSGI软件包,打包为和 Maven组ID:com.github.seancfoley Maven工件ID: Maven的版本: , , , 自5.3.1版起的OSGI捆绑包:com.github.seancfoley.ipaddress 作为库,它还可以与 , , 和互操作。 版 ...
scala语言编写的spark streamming消费kafka数据存入hbase示例代码。打包成jar包可以在spark2.4下运行,测试环境是CDH6.2,运行没有问题。
有关WebJars的更多信息,请访问网站: :发展信息运行网络应用程序: 启动本地内存缓存服务器./sbt ~run 注意:将WebJars部署到BinTray / Maven Central需要很多东西。 将来会记录在案,但就目前而言,部署将无法在...