Mavan

136 阅读2分钟

Maven

Maven 标准项目目录详细说明

目录作用
${basedir}存放 pom.xml 和所有子目录
${basedir}/src/main/java项目的 java 源代码所在的目录
${basedir}/src/main/resources项目的资源文件所在的目录,例如:propert文件
${basedir}/src/test/java测试代码所在的目录,例如:JUnit 代码
${basedir}/src/test/resources测试相关的资源文件所在的目录
${basedir}/src/main/webapp/WEB-INFweb 应用文件目录,web 项目的信息,比如存放 web.xml、本地图片、jsp 视图页面
${basedir}/target打包输出目录
${basedir}/target/classes编译输出目录
${basedir}/target/test-classes测试编译输出目录

Maven构件标识

dependency

每个构件都有自己的唯一标识(Maven 行话称之为 "唯一坐标" ),由 groupId,artifactId 和 version 等信息构成。

  • groupId:当前Maven构件隶属的组织名。groupId一般分为多段,通常情况下,第一段为域,第二段为公司名称。域又分为 org、com、cn 等,其中 org 为非营利组织,com 为商业组织,cn 表示中国。以 apache 开源社区的 tomcat 项目为例,这个项目的 groupId 是 org.apache,它的域是org(因为tomcat是非营利项目),公司名称是apache,artifactId是tomcat。(必须)
  • artifactId:项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。(必须)
  • version:当前版本。(必须)
  • packaging:打包方式,比如 jar,war... (必须)
  • classifier:classifier通常用于区分从同一POM构建的具有不同内容的构件。它是可选的,它可以是任意的字符串,附加在版本号之后。

Maven构件特性

(1)构件具有依赖传递。例如:项目依赖构件A,而构件A又依赖B,Maven会将A和B都视为项目的依赖。

(2)构件之间存在版本冲突时,Maven会依据 "短路优先" 原则加载构件。此外,我们也可以在 pom.xml 中,使用 显式排除某个版本的依赖,以确保项目能够运行。

  • (a)项目依赖构件A和B,构件A → C → D(version:1.0.0),构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.1.0)。
  • (b)项目依赖构件A和B,构件A → D(version:1.0.0), 构件B → D(version:1.1.0),此时,Maven会优先解析加载D(version:1.0.0)。

(3)构件的依赖范围。Maven在项目的构建过程中,会编译三套 ClassPath,分别对应:编译期,运行期,测试期。而依赖范围就是为构件指定它可以作用于哪套 ClassPath。

-编译期测试期运行期说明
compile默认范围
provided如 servlet-api.jar,运行期由web容器提供。
runtime编译期无需直接引用。
test如junit.jar。
system必须通过 元素,显示指定依赖文件的路径, 与本地系统相关联,可移植性差。
import表示继承父POM.XML中的依赖范围设置