`
kavy
  • 浏览: 887950 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Maven打包Scala项目

 
阅读更多

本文仅讨论使用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
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
分享到:
评论

相关推荐

    基于maven的scala与java相互调用的简单实例

    最后,为了将项目打包成可执行的jar文件,我们需要在`pom.xml`中添加`maven-jar-plugin`并配置`mainClass`属性: ```xml ... ... &lt;groupId&gt;org.apache.maven.plugins &lt;artifactId&gt;maven-jar-plugin ...

    Spark-wordcount:spark wordcount示例| 在Eclipse + Maven + Scala Project + Spark中构建

    第三步 给Scala项目注入maven依赖 将Scala 项目 转为 Maven 项目 pom.xml &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    scala eclipse maven环境搭建

    总结来说,要搭建Scala、Eclipse和Maven的开发环境,你需要安装Eclipse和Scala IDE插件,配置Maven,创建Maven Scala项目,并在`pom.xml`中管理依赖。这个环境能够支持你进行高效的Scala开发,利用Maven自动化构建...

    scala 项目构建工具

    在 Scala 中,SBT(Simple Build Tool)是默认的项目构建工具,它使得构建、管理和打包 Scala 和 Java 项目变得简单易行。本主题将深入探讨 Scala 项目构建工具 SBT,特别是关于版本 0.13.12 的使用。 SBT 0.13.12 ...

    IDEA 创建scala工程并打指定的依赖包

    本文将详细介绍如何在IDEA中创建Scala项目,并通过Maven管理依赖来打包指定的依赖包。这不仅有助于初学者快速上手,也能为有一定经验的开发者提供实用的参考。 #### 二、准备工作 1. **安装IDEA**:确保已正确安装...

    Scala-Maven-Template:Scala Maven项目是空项目,用于为Scala项目配置Maven

    Maven的配置文件是`pom.xml`,在这个模板中,这个文件会预先设置好必要的Scala和Sbt插件,以便于编译、测试和打包Scala代码。`pom.xml`文件定义了项目的依赖、插件、构建生命周期等信息。例如,它可能会包含`scala-...

    Scala-maven-assignment

    通过这种方式,你可以使用 Maven 管理 Scala 项目,包括编译、测试和打包。在 `Scala-maven-assignment-main` 这样的项目中,你将找到 Scala 代码、测试代码以及所有相关配置。通过 Maven,你可以轻松地在不同的环境...

    Spark-Scala-Maven-示例:Spark,Scala项目的示例Maven配置

    在Spark-Scala项目中,Maven的`pom.xml`文件是核心,它定义了项目属性、依赖关系、构建生命周期和插件等信息。 在`pom.xml`中,你需要包含以下关键部分: 1. **项目信息**:包括groupId、artifactId和version,这...

    scala和java混合编译

    最后,通过`mvn clean package`命令,Maven会执行整个构建过程,包括编译、测试和打包。如果一切配置得当,你的Java和Scala代码将会成功混合编译,并且可以正常运行。 总的来说,混合使用Java和Scala需要理解Maven...

    hadoop scala spark 例子项目,运行了单机wordcount

    4. **Maven**: Maven帮助开发者管理项目依赖,构建和打包应用程序。在这个项目中,Maven可能被用来管理Scala、Spark和其他库的依赖,并生成可执行的jar文件,以便于在集群或单机上运行WordCount。 在单机模式下运行...

    scala-dist:打包Scala发行版的sbt项目

    该项目将"org.scala-lang" % "scala-dist" % $version Maven工件变形为Scala $version发行$version (zip,tar.gz,deb,rpm和msi)。 要构建发行版,请运行: universal:packageBin构建通用zip安装程序 universal...

    play2-maven-plugin-1.0.0-alpha9.zip

    Maven插件则为开发者提供了一种自动化构建工具,用于编译、测试、打包、部署等项目管理任务。 在Play 2.x中,开发者通常使用SBT(Simple Build Tool)作为默认的构建工具,但有些开发者可能更习惯于Maven的工作流程...

    Maven教程.pdf

    Maven 的使用不仅仅局限于 Java 项目,它还可以用于构建和管理其他语言的项目,比如 C#、Ruby、Scala、Jython、Groovy 等,通过相应的 Maven 插件可以实现这些语言的项目构建。 随着项目版本的迭代,Maven 提供了...

    spark core、spark sql以及spark streaming 的Scala、java项目混合框架搭建以及大数据案例

    项目中使用Maven进行打包,意味着包含了pom.xml配置文件,用于定义项目依赖和构建过程。通过Maven,开发者可以轻松地引入Spark和其他库,确保项目的一致性和可重复性。 7. **HDFS**:Hadoop分布式文件系统(HDFS)...

    sampleMixedScalaJavaMavenProject:混合ScalaJava Maven项目

    在这个"sampleMixedScalaJavaMavenProject"中,我们将看到一个巧妙地融合了Scala和Java的Maven项目。Maven是一个强大的构建工具,它帮助开发者管理项目依赖、构建过程以及自动化测试。通过使用Maven,我们可以确保...

    基于maven依赖,利用scala编写spark,打包jar+源代码+文档说明

    2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...

    scala-maven-archetype

    Scala Maven Archetype是一个用于快速构建Scala项目的工具,它基于Maven Archetype机制,为开发者提供了一个基础模板,以便于初始化一个新的Scala项目。这个压缩包文件"scala-maven-archetype-master"很可能包含了该...

    Maven Reference

    Maven不仅支持Java和JVM平台上的其他语言,如Scala、JRuby、Groovy和Grails,还能编译C、C++和.NET代码。此外,Maven还允许编写自定义插件来补充构建流程,可以重用Ant中的任何组件,体现了高度的灵活性和可扩展性。...

    scala jar

    4. **构建工具**:Scala社区广泛使用的构建工具有SBT(Simple Build Tool),它可以创建、打包和发布Scala项目,包括生成可执行的JAR文件。 5. **模块化设计**:大型系统可能由多个模块组成,每个模块可以被打包成...

Global site tag (gtag.js) - Google Analytics