maven的指令
maven的指令, 运行我们的插件
常见的指令:
mvn archetype:generate :创建 Maven 项目
mvn compile :编译源代码
mvn test-compile :编译测试代码
mvn test : 运行应用程序中的单元测试
mvn site : 生成项目相关信息的网站
mvn clean :清除目标目录中的生成结果
mvn package : 依据项目生成 jar 文件
mvn install :在本地 Repository 中安装 jar
mvn deploy:将jar包发布到远程仓库
mvn eclipse:eclipse :生成 Eclipse 项目文件
第二种运行指令:
同一个项目:
相同的groupId, version
但是artifactId一定不一样
依赖的范围:
maven项目的classpath: 类路径, target/classes
依赖设置
<scope>
设置依赖的范围, 默认: compile
maven依赖范围:
compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在 编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。
provided:provided 依赖只有在当 JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,打包:比如:servlet-api,jsp-api 被 tomcat 容器提供。
runtime:runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以 runtime 范围的依赖会被打包。
test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以 test范围依赖不会被打包。
system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中 JAR 文件的路径,需要指定 systemPath 磁盘路径,system依赖不推荐使用。
scope为test的依赖不会传递:
依赖的传递:
A -依赖-> B-依赖-> C:
在A项目中, 既包含B, 也包含C, 这个C由B传递的
依赖的优先级
A-依赖->B -依赖->C.1版本: C.1 称为A的间接依赖
A-依赖->C.2版本: C.2称为A的直接依赖
在A项目中: 就近原则: 直接依赖优先级高于间接依赖
如果直接依赖中包含有同一个坐标不同版本的资源依赖,以配置顺序下方的版本为准(就近原则
排除依赖的传递
使用<exclusions><exclusion>
排除某个依赖的传递
<dependency> <groupId>com.fs</groupId> <artifactId>maven-demo1</artifactId> <version>1.0-SNAPSHOT</version> <!--排除依赖--> <exclusions> <exclusion> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </exclusion> </exclusions> </dependency>