maven
dependencyManagement与dependencies区别
说明
dependencyManagement里只是声明依赖,指定版本,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。
dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。
maven的常用命令
${basedir} | 存放pom.xml和所有的子目录 |
|---|---|
${basedir}/src/main/java | 项目的java源代码 |
${basedir}/src/main/resources | 项目的资源,比如说property文件,springmvc.xml |
| mvn clean | 表示运行清理操作(会默认把target文件夹中的数据清理) |
| mvn clean compile | 表示先运行清理之后运行编译 |
| mvn clean package | 运行清理和打包 |
| mvn clean install | 运行清理和安装,会将打好的包安装到本地仓库 |
| mvn clean deploy | 运行清理和发布(发布到私服上面) |
| mvn dependency:resolve | 重新导入maven依赖的jar包,idea经常使用 |
补充:
Maven命令行中,可以使用以下指令来根据pom.xml文件下载项目依赖,需要在包含pom.xml文件的项目根目录下执行。确保你已经配置好了Maven环境,并且可以正常运行Maven命令。
mvn dependency:resolve
以下是几个Maven的常用命令及其作用:
mvn clean: 清理项目,删除target目录,移除编译和测试过程中产生的临时文件和结果。
mvn compile: 编译项目的源代码,将.java文件转化为.class文件,并放置在target/classes目录下。
mvn test: 运行项目的单元测试,通常位于src/test/java目录下。
mvn package: 打包项目,如对于Java项目,会创建一个JAR或WAR文件,放置在target目录下。
mvn install: 在执行package之后,将打包好的文件安装到本地Maven仓库,这样其他项目就可以作为依赖引用这个项目。
mvn deploy: 通常用于将最终的工件部署到远程仓库,比如私有的Maven仓库服务器,让其他开发者或构建系统可以访问。
mvn validate: 验证项目配置,确保项目可以被正确构建。
mvn site: 生成项目站点文档,包括报告和项目信息。
mvn dependency:tree: 显示项目的依赖树,帮助理解依赖关系。
mvn help:effective-pom: 显示项目的实际生效POM,包括继承和聚合后的所有配置。
如果你需要使用Maven Formatter Plugin来格式化代码,你需要在pom.xml中配置该插件,然后运行相应的目标,如mvn formatter:format。请注意,这并不是Maven的内置命令,而是使用插件提供的扩展命令
pom文件结构
<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>
<!-- 公司或者组织的唯一标志,并且配置时生成的路径也是由此生成, 如com.companyname.project-group,maven会将该项目打成的jar包放本地路径:/com/companyname/project-group -->
<groupId>com.companyname.project-group</groupId>
<!-- 项目的唯一ID,一个groupId下面可能多个项目,就是靠artifactId来区分的 -->
<artifactId>project</artifactId>
<!-- 版本号 -->
<version>1.0</version>
<!-- 继承自该项目的所有子项目的默认依赖信息。这部分的依赖信息不会被立即解析,而是当子项目声明一个依赖(必须描述group ID和 artifact
ID信息),如果group ID和artifact ID以外的一些信息没有描述,则通过group ID和artifact ID 匹配到这里的依赖,并使用这里的依赖信息。 -->
<dependencyManagement>
<dependencies>
<!--参见dependencies/dependency元素 -->
<dependency>
......
</dependency>
</dependencies>
</dependencyManagement>
<!--该元素描述了项目相关的所有依赖。 这些依赖组成了项目构建过程中的一个个环节。它们自动从项目定义的仓库中下载。要获取更多信息,请看项目依赖机制。 -->
<dependencies>
<dependency>
<!--依赖的group ID -->
<groupId>org.apache.maven</groupId>
<!--依赖的artifact ID -->
<artifactId>maven-artifact</artifactId>
<!--依赖的版本号。 在Maven 2里, 也可以配置成版本号的范围。 -->
<version>3.8.1</version>
<!-- 依赖类型,默认类型是jar。它通常表示依赖的文件的扩展名,但也有例外。一个类型可以被映射成另外一个扩展名或分类器。类型经常和使用的打包方式对应,
尽管这也有例外。一些类型的例子:jar,war,ejb-client和test-jar。如果设置extensions为 true,就可以在 plugin里定义新的类型。所以前面的类型的例子不完整。 -->
<type>jar</type>
<!-- 依赖的分类器。分类器可以区分属于同一个POM,但不同构建方式的构件。分类器名被附加到文件名的版本号后面。例如,如果你想要构建两个单独的构件成
JAR,一个使用Java 1.4编译器,另一个使用Java 6编译器,你就可以使用分类器来生成两个单独的JAR构件。 -->
<classifier></classifier>
<!--依赖范围。在项目发布过程中,帮助决定哪些构件被包括进来。欲知详情请参考依赖机制。 - compile :默认范围,用于编译 - provided:类似于编译,但支持你期待jdk或者容器提供,类似于classpath
- runtime: 在执行时需要使用 - test: 用于test任务时使用 - system: 需要外在提供相应的元素。通过systemPath来取得
- systemPath: 仅用于范围为system。提供相应的路径 - optional: 当项目自身被依赖时,标注依赖是否传递。用于连续依赖时使用 -->
<scope>test</scope>
<!--仅供system范围使用。注意,不鼓励使用这个元素,并且在新的版本中该元素可能被覆盖掉。该元素为依赖规定了文件系统上的路径。需要绝对路径而不是相对路径。推荐使用属性匹配绝对路径,例如${java.home}。 -->
<systemPath></systemPath>
<!--当计算传递依赖时, 从依赖构件列表里,列出被排除的依赖构件集。即告诉maven你只依赖指定的项目,不依赖项目的依赖。此元素主要用于解决版本冲突问题 -->
<exclusions>
<exclusion>
<artifactId>spring-core</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
<!--可选依赖,如果你在项目B中把C依赖声明为可选,你就需要在依赖于B的项目(例如项目A)中显式的引用对C的依赖。可选依赖阻断依赖的传递性。 -->
<optional>true</optional>
</dependency>
</dependencies>
</project>
增加servers节点让maven支持http
<!-- 添加servers部分以支持HTTP仓库 -->
<!-- 添加mirrors部分来覆盖默认的HTTP阻断 -->
<mirrors>
<mirror>
<id>rdc-releases-mirror</id>
<mirrorOf>rdc-releases</mirrorOf>
<url>http://10.184.177.156/service/app-sandbox/file/download?storageKey=maven-dependencies/release/</url>
</mirror>
<mirror>
<id>rdc-snapshots-mirror</id>
<mirrorOf>rdc-snapshots</mirrorOf>
<url>http://10.184.177.156/service/app-sandbox/file/download?storageKey=maven-dependencies/snapshot/</url>
</mirror>
</mirrors>
<servers>
<server>
<id>rdc-releases</id>
<configuration>
<httpConfiguration>
<get>
<useSystemProperties>true</useSystemProperties>
</get>
</httpConfiguration>
</configuration>
</server>
<server>
<id>rdc-snapshots</id>
<configuration>
<httpConfiguration>
<get>
<useSystemProperties>true</useSystemProperties>
</get>
</httpConfiguration>
</configuration>
</server>
</servers>