使用Maven对Java独立应用程序进行编译打包

一、 安装Maven

1.解压,移动安装包
复制代码
sudo tar -zxf ~/apache-maven-3.9.6-bin.tar.gz -C /usr/local/
cd /usr/local/
sudo mv apache-maven-3.9.6/ ./maven-3.9.6
sudo chown -R qiangzi ./maven-3.9.6

二、Java应用程序代码

1.版本信息:

Spark-2.1.0、Maven-3.9.6

(1)在终端执行命令创建文件夹sparkapp2作为应用程序根目录
bash 复制代码
cd ~ #进入用户主文件夹
mkdir -p ./sparkapp2/src/main/java
(2)在 ./sparkapp2/src/main/java 下建立一个名为 SimpleApp.java 的文件
bash 复制代码
cd ~
vim ./sparkapp2/src/main/java/SimpleApp.java

添加代码如下:

java 复制代码
/*** SimpleApp.java ***/
import org.apache.spark.api.java.*;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.SparkConf;
                                                                                                                        public class SimpleApp {                                                                                                    public static void main(String[] args) {
        String logFile = "file:///usr/local/spark-2.1.0/README.md"; // Should be some file on your system
        SparkConf conf=new SparkConf().setMaster("local").setAppName("SimpleApp");
        JavaSparkContext sc=new JavaSparkContext(conf);
        JavaRDD<String> logData = sc.textFile(logFile).cache();
        long numAs = logData.filter(new Function<String, Boolean>() {
            public Boolean call(String s) { return s.contains("a"); }
        }).count();
        long numBs = logData.filter(new Function<String, Boolean>() {                                                               public Boolean call(String s) { return s.contains("b"); }                                                           }).count();                                                                                                             System.out.println("Lines with a: " + numAs + ", lines with b: " + numBs);                                          }                                                                                                                   }  
(3)该程序依赖Spark Java API,通过Maven进行编译打包。在./sparkapp2目录中新建文件pom.xml,命令如下:
java 复制代码
cd ~/sparkapp2
vim pom.xml
(4)在pom.xml文件中添加内容如下,声明该独立应用程序的信息以及与Spark的依赖关系:
java 复制代码
<project>
    <groupId>cn.edu.xmu</groupId>
    <artifactId>simple-project</artifactId>
    <modelVersion>4.0.0</modelVersion>
    <name>Simple Project</name>
    <packaging>jar</packaging>
    <version>1.0</version>
    <repositories>
        <repository>
            <id>jboss</id>
            <name>JBoss Repository</name>
            <url>http://repository.jboss.com/maven2/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency> <!-- Spark dependency -->
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId> //这里是 Spark 的核心库,针对 Scala 2.11 版本。
            <version>2.1.0</version> //这里是 2.1.0 版本的 Spark
        </dependency>
    </dependencies>
</project>
2. 使用Maven打Java程序
(1)为了保证maven能够正常运行,先执行如下命令检查整个应用程序的文件结构:
java 复制代码
cd ~/sparkapp2
find .
(2)文件结构如下图:
(3)接着,我们可以通过如下代码将这整个应用程序打包成Jar(注意:电脑需要保持连接网络的状态,而且首次运行需要下载依赖包,时间消耗太长):
java 复制代码
cd ~/sparkapp2
/usr/local/maven-3.9.6/bin/mvn package
(4)如出现下信息,说明生成Jar包成功:
(5)如果运行Maven编译打包过程很慢,是因为需要到国外网站下载很多的依赖包,国外网站速度很慢,可以更改为国内的仓库地址,修改Maven的配置文件,让Maven到国内的阿里云仓库下载相关依赖,提高打包的速度。
java 复制代码
cd /usr/local/maven-3.9.6/conf
vim settings.xml
(6)将settings.xml中的文本改为以下内容:
java 复制代码
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                      http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云公共仓库</name>
        <url>https://maven.aliyun.com/repository/public</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云谷歌仓库</name>
        <url>https://maven.aliyun.com/repository/google</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云阿帕奇仓库</name>
        <url>https://maven.aliyun.com/repository/apache-snapshots</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云spring仓库</name>
        <url>https://maven.aliyun.com/repository/spring</url>
    </mirror>
    <mirror>
        <id>aliyunmaven</id>
        <mirrorOf>*</mirrorOf>
        <name>阿里云spring插件仓库</name>
        <url>https://maven.aliyun.com/repository/spring-plugin</url>
    </mirror>
</mirrors>
</settings>
3.通过spark-submit 运行程序
(1)最后,可以通过将生成的jar包通过spark-submit提交到Spark中运行,如下命令:
bash 复制代码
/usr/local/spark-2.1.0/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar
# 上面命令执行后会输出太多信息,使用下面命令查看想要的结果
/usr/local/spark-2.1.0/bin/spark-submit --class "SimpleApp" ~/sparkapp2/target/simple-project-1.0.jar 2>&1 | grep "Lines with a"
(2)得到的结果如下:
相关推荐
Scott9999HH8 小时前
【IIoT流量实战】蒸汽管道阀门全关却仍有流量?用 Python 实现涡街信号 FFT 频谱分析与温压全补偿积算网关,深度拆解靠谱的涡街流量计厂家硬核技术标准
开发语言·python
码智社9 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
AI云海9 小时前
python 列表、元组、集合和字典
开发语言·python
萧瑟余晖10 小时前
JDK 26 新特性详解
java·开发语言
马优晨10 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
人邮异步社区12 小时前
怎么把C语言学到精通?
c语言·开发语言
心平气和量大福大13 小时前
C#-WPF-控件-TextBox 数据绑定
开发语言·c#·wpf
ttwuai13 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
এ慕ོ冬℘゜13 小时前
前端基础:什么是时间戳?JS获取时间戳三种方法与实战用途
开发语言·前端·javascript
执明wa13 小时前
LayoutInflater详解: XML是如何变成View的?
android·xml·开发语言·android studio