@[toc]
完整 POM 示例文件
<?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>
<groupId>org.jsu</groupId>
<artifactId>HiveUseSparkToClickHouse</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.12</artifactId>
<version>3.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.12</artifactId>
<version>3.3.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.12</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Scala Compiler -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<!--打包依赖-->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
引入该 pom
文件打包后,会生成两个 jar
包,如下所示:
其中一个是具有依赖包,一个是轻量级的包,按照集群环境进行选择。
集群拥有相关执行依赖,则可以使用轻量级的包,否则就需要使用具有依赖的包。
Scope 作用域
在 Maven 中,scope
元素用于指定依赖的作用范围,告诉 Maven 在构建项目时如何处理依赖项。
常见的 scope
值及其含义如下:
compile:默认的
scope
,表示依赖项在编译、测试和运行时都可用。这意味着依赖项将包含在编译和运行的classpath
中。provided:表示依赖项在编译和测试时可用,但在运行时由目标环境(例如应用服务器)提供。这通常用于将依赖项排除在最终的打包文件之外,因为目标环境已经包含了这些依赖项。
runtime:表示依赖项在运行时可用,但不会在编译时和测试时包含在
classpath
中。这通常用于在运行时需要但在编译时不需要的依赖项。test:表示依赖项只在测试时可用,不会包含在编译和运行时的
classpath
中。这通常用于测试框架、工具和辅助库。system:类似于
provided
,但是需要显式指定依赖项的路径。这通常用于引用本地系统上的 JAR 文件,极少使用,并不推荐。
打包报错
Failed to execute goal net.alchim31.maven:scala-maven-plugin:3.2.0:compile (default) on project HiveUseSparkToClickHouse: wrap: org.apache.commons.exec.ExecuteException: Process exited with an error: 1 (Exit value: 1)大概率是你的项目创建在一个中文路径下,关闭 IDEA,将该项目移到非中文路径下,重新打包即可解决。