IDEA maven使用详解

前提

确保本地安装了maven

以一个模块工程为例,内部包含了许多maven项目
在这里插入图片描述

生命周期

这是全部的生命周期
在这里插入图片描述

其中,常用的生命周期的各个功能为:
(clean生命周期)mvn clean清理target
(default生命周期①)mvn validate验证项目为maven项目,正确并且所有信息可用
(default生命周期②)mvn compile编译源代码为.class文件(java)
(default生命周期③)mvn test对管理的模块项目进行test目录下的(JUnit)单元测试
(default生命周期④)mvn package打包.class文件成为JAR(或其它格式文件)
(default生命周期⑤)mvn verify集成测试,运行任意的检查测试来验证项目达到标准
(default生命周期⑥)mvn install安装包到本地maven仓库(自己取的结构名下可以找到),可供他人使用
(default生命周期⑦)mvn depoly远程部署,需要在maven本地仓库的setting里面写用户名密码,以及连上服务器上的(nexus)私有仓库
(site生命周期)mvn site覆盖率测试和PMD测试,生成报告,生成站点

在这里插入图片描述

自定义拓展插件

可用自定义插件,需要在POM中写入(这里展示生成源码jar包插件
写入区域为<project>内,格式:

<build>
        <plugins>
            <plugin>
            <!--GAV坐标-->
                <groupId>org. apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>2.2.1</version>
                <!--执行内容-->
                <executions>
                    <execution>
                    <!--执行目标-->
                        <goals>
                         <!--jar:对源码打包,test-jar:对测试代码打包-->
                            <goal>jar</goal>
                        </goals>
                        <!--执行阶段,可在前面图片内查看过程-->
                        <phase>generate-test-resources</phase>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

写完后,点击install,即可发现有2个jar包,一个是发布的jar包,一个是源码jar包
在这里插入图片描述

当我们在这写入2个目标时,就会生成测试jar包和源码jar包了
在这里插入图片描述

分模块开发与设计思想

通常在中大型项目中需要解耦,因此将原有的单模块(dao,service,controller层统一由一个pom进行管理)全部拆分成独立的模块,方便团队协作开发
项目的大模块又称聚合模块
在这里插入图片描述

父模块pom编写

父模块作为所有项目的模块的祖宗模块,它需要统一管理版本
因此,pom中必须有版本管理配置
其中,<dependencyManagement>中的 ${XXX.version}对应的是上面<properties>内的版本
请注意,<dependencyManagement>是不会自动加载依赖的(懒加载),只有你在继承它的子模块中加入了相应的依赖,并且不填写版本,maven才会加载。
当然,如果你在子模块中写入了版本,maven则会以就近原则来选取子模块的版本
子模块可用加入父模块没有的依赖,作为自己需要的依赖

<properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <!--spring-->
        <spring-boot.version>2.3.7.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <spring-boot.version>...</spring-boot.version>
</properties>
<dependencyManagement>
        <dependencies>
            <!--SpringCloud-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!--SpringBoot-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                GAV...
            </dependency>
    </dependencyManagement>
</dependencies>

子模块pom编写

所有的子模块都需要继承父模块parent进行统一的版本管理,格式为:

<parent>
        <groupId>组织地址</groupId>
        <artifactId>父模块名称</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../父模块名称</relativePath>
</parent>

聚合模块pom编写

聚合模块指定了内部的子模块,同时也是继承了父模块parent(也是parent的子模块),格式为

<parent>
        <groupId>组织地址</groupId>
        <artifactId>父模块名称</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../父模块名称</relativePath>
</parent>
<modules>
        <module>控制层子模块名称</module>
        <module>业务层子模块名称</module>
        <module>模型层子模块名称</module>
</modules>

同时,需要加上<packaging>pom</packaging>,因为这样使得maven辨别此为聚合模块,而不是一个把子模块全部混淆的jar包父模块pom与jar详解

聚合模块的子模块pom编写

聚合模块的子模块可以是各层拆分后得到的模块(dao,service,ctrler等)
因此,它需要指定父模块为聚合模块,路径不需要填写(填写正确也没啥事)

<parent>
        <groupId>cn.emscc</groupId>
        <artifactId>emscc-content</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../../emscc-content</relativePath>
</parent>

由于我们已经写好了一个base模块,供别的模块调用依赖,因此,我们调用一下base模块即可,然后再调用自己相调用的依赖

<!--emscc-base-->
<dependency>
            <groupId>cn.emscc</groupId>
            <artifactId>emscc-base</artifactId>
            <version>0.0.1-SNAPSHOT</version>
</dependency>

在这里插入图片描述

版本冲突

在这里插入图片描述

如:A依赖了B的1.0,C依赖了B的2.0,导致B有2个版本

解决办法:
①使用<exclusions>排除依赖
只使用B的1.0版本,那么在依赖C时排除对B的依赖
②使用<dependencyManagement>锁定版本号

循环依赖

A模块要去依赖B模块的部分功能,B模块也要去依赖A模块的部分功能;
从而导致maven在打包时不知道先去打包哪个(由于maven打包是自下而上的打包方式)
解决办法:
①设置service与service impl包,将各个不同模块的互相引用分离开来,其它模块引用自己的接口,而自己的模块也引用其它模块的接口即可
②添加一个中间模块,让大家都去引用中间模块

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 1. 首先,在IDE中创建一个新的Maven项目。 2. 在pom.xml文件中添加Spark依赖项。例如: ``` <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.0</version> </dependency> </dependencies> ``` 3. 创建一个Java类,并在其中编写Spark应用程序代码。例如: ``` import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; public class SparkApp { public static void main(String[] args) { SparkConf conf = new SparkConf().setAppName("SparkApp").setMaster("local[*]"); JavaSparkContext sc = new JavaSparkContext(conf); JavaRDD<String> lines = sc.textFile("input.txt"); JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaRDD<String> filteredWords = words.filter(word -> !word.isEmpty()); filteredWords.saveAsTextFile("output.txt"); sc.stop(); } } ``` 4. 在IDE中运行Spark应用程序。您可以使用本地模式或分布式模式运行应用程序。 5. 您可以在输出目录中找到生成的输出文件。 ### 回答2: 理解Spark和Maven的基础知识是创建Maven的Spark项目的关键所在。在这个教程中,我们将详细介绍如何创建一个Maven的Spark项目,同时也会解释代码的每一个部分。 Spark和Maven介绍: Spark是一个开源的大数据处理框架,它提供了一个高速的、可扩展的基于内存的计算方法。而MavenJava应用程序的项目管理工具,它使得构建和管理项目变得更加容易。 步骤一:创建Maven项目 1.打开Eclipse IDE,选择"File"-> "New" -> "Project"。 2. 在弹出的对话框中,选择"Maven" -> "Maven Project"。 3. 点击"Next"按钮,选中"Create a simple project"选项,填写项目的GroupId,ArtifactId和Version信息。 4. 点击下一步,填写项目的名称和位置。 5. 选择"Maven archetype",选择"maven-archetype-quickstart"。 6. 最后,点击"Finish"按钮来完成项目的创建。 步骤二:添加Spark依赖 1. 打开pom.xml文件,在里面添加Spark的依赖。Spark有多个版本,所以选择正确的依赖非常重要。 2. 在pom.xml的dependencies标签中添加以下代码: ``` <dependencies> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.11</artifactId> <version>2.4.0</version> </dependency> </dependencies> ``` 这里我们使用了Spark 2.4.0的核心版本。 步骤三:创建Java类 1. 右键点击src/main/java文件夹,新建一个Java类。 2. 在类中编写我们的Spark代码,这里我们编写Word Count示例。 ``` import org.apache.spark.SparkConf; import org.apache.spark.api.java.JavaRDD; import org.apache.spark.api.java.JavaSparkContext; public class WordCount { public static void main(String[] args) { String inputFile = args[0]; String outputFile = args[1]; // 创建SparkConf对象 SparkConf conf = new SparkConf() .setAppName("WordCount"); // 创建JavaSparkContext对象 JavaSparkContext sc = new JavaSparkContext(conf); // 读取文件 JavaRDD<String> input = sc.textFile(inputFile); // 对每个单词计数并排序 JavaRDD<String> words = input.flatMap(line -> Arrays.asList(line.split(" ")).iterator()); JavaPairRDD<String, Integer> counts = words.mapToPair(word -> new Tuple2<>(word, 1)) .reduceByKey((a, b) -> a + b); JavaPairRDD<Integer, String> countsSwap = counts.mapToPair(x -> x.swap()); JavaPairRDD<Integer, String> sortedCounts = countsSwap.sortByKey(false); JavaPairRDD<String, Integer> result = sortedCounts.mapToPair(x -> x.swap()); result.saveAsTextFile(outputFile); } } ``` 步骤四:打包和运行代码 1. 在终端中,使用以下命令来进入项目的根目录: ``` cd /path/to/project ``` 2. 在终端中,使用以下命令使用Maven来打包项目: ``` mvn package ``` 这将在项目的target目录中生成可执行的JAR文件。 3. 在终端中,使用以下命令来运行代码: ``` spark-submit --class WordCount /path/to/your-jar-file.jar input.txt output.txt ``` 其中,/path/to/your-jar-file.jar是你的项目生成的JAR文件的路径,input.txt和output.txt是输入和输出文件的路径。 完成这些步骤之后,你就可以成功的创建了一个Maven的Spark项目,并运行了一个简单的Spark应用程序。 ### 回答3: 首先,为了创建Maven的Spark项目,我们需要先安装Maven和Spark。在安装完成后,我们可以按照以下步骤创建Maven的Spark项目: 1. 在命令行中输入以下命令来创建一个基础项目: mvn archetype:generate -DgroupId=com.example -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false 2. 在创建完成之后,我们需要在pom.xml文件中添加Spark的依赖。可以在Maven官网上找到Spark的依赖信息,并将其复制到pom.xml文件中。 3. 接下来,我们需要在我们的代码中添加Spark相关的代码来运行Spark应用程序。Spark应用程序通常由SparkConf和SparkContext对象的创建和使用组成。 4. 创建SparkConf对象时,需要使用setAppName方法来设置应用程序的名称,并使用setMaster方法来设置Spark应用程序在哪个节点上运行。 5. 创建SparkContext对象时,需要向构造函数传递SparkConf对象,并且指定Spark应用程序所需的一些配置,例如worker节点的数量等。 6. 最后,我们可以在我们的代码中运行Spark应用程序,使用SparkContext对象来创建RDD对象并执行相关的操作。 以上就是创建Maven的Spark项目的详细步骤。需要注意的是,在完成Spark应用程序的编写之后,我们还需要使用Maven来构建和打包应用程序,以便在集群上运行。通过maven命令mvn package,我们可以将Spark应用程序打包成一个jar文件,并在Spark集群上运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值