Maven详解(入门到精通)学习maven有这个就够了_精通maven_做技术我是认真的的博客-CSDN博客
⚫官网: Maven – Welcome to Apache Maven
⚫ 下载地址:Maven – Download Apache Maven
下载完直接解压,配置环境变量
MAVEN_HOME=D:\BottomSoftware\apache-maven-3.6.3
Path增加%MAVEN_HOME%\bin
cmd输入mvn测试
花里胡哨,就是资源所在的地址, org.apache.spark
中央仓库:Central Repository:
%MAVEN_HOME%\conf修改setting.xml,找到这一段,加上阿里云
- <mirrors>
-
- <mirror>
- <id>alimavenid>
- <mirrorOf>centralmirrorOf>
- <name>aliyun-mavenname>
- <url>http://maven.aliyun.com/nexus/content/repositories/central/url>
- mirror>
-
-
-
- mirrors>
- <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/maven-v4_0_0.xsd">
- <modelVersion>4.0.0modelVersion>
-
-
-
- <groupId>com.itheimagroupId>
- <artifactId>project-java项目名artifactId>
- <version>1.0-SNAPSHOTversion>
-
-
-
- <packaging>jarpackaging>
-
- <dependencies>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- dependency>
- dependencies>
- project>
- <dependency>
- // 这里是jar包的索引结构,按下图找
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- // 这里是版本
- <version>4.12version>
- dependency>
-
- <dependency>
- <groupId>log4jgroupId>
- <artifactId>log4jartifactId>
- <version>1.2.13version>
- dependency>
https://mvnrepository.com/search?q=log4j
问题:如果一个项目需要另一个项目的依赖项
在java01里配置
- <dependency>
- <groupId>org.examplegroupId>
- <artifactId>java02artifactId>
- <version>1.0-SNAPSHOTversion>
- dependency>
问题:同一个jar包,java01使用了1.2.12版本,导入的java02使用了1.2.13版本,怎么办
看层级
后面的覆盖前面的生效
相关,java02中是test,java01里就看不到了
对外隐藏,不让别人用,这样别的模块引用就看不见这个了
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- <optional>trueoptional> // 可选依赖设置
- dependency>
在java01里配个exclusions,主动断开间接依赖
- <dependency>
- <groupId>org.examplegroupId>
- <artifactId>java02artifactId>
- <version>1.0-SNAPSHOTversion>
- <exclusions>
- <exclusion>
- <groupId>log4jgroupId>
- <artifactId>log4jartifactId>
- exclusion>
- exclusions>
- dependency>
-
- <dependency>
- <groupId>junitgroupId>
- <artifactId>junitartifactId>
- <version>4.12version>
- <exclusions>
- <exclusion>
- <groupId>org.hamcrestgroupId>
- <artifactId>hamcrest-coreartifactId>
- exclusion>
- exclusions>
- dependency>
主程序范围有效(main文件夹范围内)
测试程序范围有效(test文件夹范围内) Me:[在test包里可以导,在main程序里导不进去]
是否参与打包(packagel指令范围内)
传递 结果
大整体
- clean:清理工作
- default:核心工作,例如编译,测试,打包,部署等
- site:产生报告,发布站点等
当做中间的一件事n,会从0做到n(开始test,会从validate-----------test都做了)
去这里找需要的插件和goal等用法、指定在哪生效:
https://maven.apache.org/plugins/maven-source-plugin/
java01加上
- <build> // 写在构建下
- <plugins>
- <plugin>
- <groupId>org.apache.maven.pluginsgroupId>
- <artifactId>maven-source-pluginartifactId>
- <version>3.2.0version>
-
- <executions> // 执行设置
- <execution>
- <goals>
- <goal>jargoal> // 执行结果
- <goal>test-jargoal>
- goals>
- // 在哪个阶段执行生效
- <phase> generate-test-resourcesphase>
- execution>
- executions>
- plugin>
-
- <plugin>
- 别的插件
- plugin>
-
- plugins>
-
- build>
多一个 maven-source-plugin
执行完test周期后,多了个jar,里面有源码
多个子工程中依赖同样的jar包,但是采用test范围;由于test范围没有传递性;所以,每一个工程都需要对test范围的jar包进行单独依赖;
而如果希望修改多个工程中所依赖test范围的jar包版本,那么,一个一个项目去修改太麻烦,这时可以应用继承解决。
继承的使用:
(1)定义一个父工程,父工程packaging必须是pom
项目的打包类型:pom、jar、war
packing默认是jar类型,
pom ---------> 父类型都为pom类型
jar ---------> 普通项目打jar包,一般普通项目设置jar
war ---------> web项目一般都是打war包,web项目的话设置war
(2)在父工程中定义依赖的jar包,属于test范围:
- <packaging>pompackaging>
-
- <dependencyManagement>
-
- <dependencies>
-
- <dependency>
-
- <groupId>junitgroupId>
-
- <artifactId>junitartifactId>
-
- <version>4.0version>
-
-
- <scope>testscope>
-
- dependency>
-
- dependencies>
-
- dependencyManagement>
- (3)在各个子工程中对父工程进行继承:
-
- <parent>
-
- <groupId>com.mqf.mavengroupId>
-
- <artifactId>MavenParentartifactId>
-
- <version>0.0.1-SNAPSHOTversion>
-
- <relativePath>../MavenParent/pom.xmlrelativePath>
-
- parent>
(4)在各个子工程中对父工程中的包进行依赖,但是,不需要配置版本号和范围(与父工程的版本号和范围一致)
- <dependency>
-
- <groupId>junitgroupId>
-
- <artifactId>junitartifactId>
-
- dependency>
(5)如果希望修改版本,只需要修改父工程中的依赖jar包版本就可以了,那么,各个子工程中的jar包版本就都变了
(6)一个子工程只能继承一个父工程.
1. 父项目加入让子项目依赖的jar包配置
子项目继承父项目(继承后自动使用父类往外暴露的jar包)
HelloFriend项目中的pom:
MakeFriend的pom:
MakeFriend继承了Parent就可以选择使用父工程的pom中暴露的jar包: