maven POM.xml详解

合集下载

【Maven】配置文件详解

【Maven】配置文件详解

【Maven】配置⽂件详解概述参考本⽂讲解Maven的配置⽂件及其命令的使⽤。

Maven及其项⽬⽬录结构Maven⽬录结构Maven⼯程⽬录结构其中pom指project object model (项⽬对象模型) 或者 package object management (依赖包对象管理器)配置⽂件Maven常⽤的核⼼配置⽂件包括全局配置⽂件settings.xml和项⽬配置⽂件pom.xml,还有不常⽤的⽤户配置⽂件settings.xmlnote 如果在上述三个配置⽂件中出现相同配置,则优先级如下:pom.xml>settings.xmlnote>settings.xml以下所有配置⽂件资源来源于课程《》,包含的资源列表如下:全局配置 settings.xml顶级标签settings.xml 配置包含如下顶级标签完整的settings.xml 配置<settings ...><localRepository/> <!--本地仓库路径--><interactiveMode/> <!--是否需要和⽤户交互,默认true ,⼀般⽆需修改--><usePluginRegistry/> <!--是否通过pluginregistry.xml 独⽴⽂件配置插件,默认false,⼀般直接配置到pom.xml--><offline/> <!--是否离线模式,默认false ,如果不想联⽹,可以开启--><pluginGroups/> <!--配置如果插件groupid 未提供时⾃动搜索,⼀般很少配置--><servers/> <!--配置远程仓库服务器需要的认证信息,如⽤户名和密码--><mirrors/> <!--为仓库列表配置镜像列表--><proxies/> <!--配置连接仓库的代理--><profiles/> <!--全局配置项⽬构建参数列表,⼀般通过它配置特定环境的定制化操作--><activeProfiles/> <!--⼿⼯激活profile ,通过配置id 选项完成激活--><activation/> <!--profile 的扩展选项,指定某些条件下⾃动切换profile 配置--><properties/> <!--在配置⽂件中声明扩展配置项--><repositories/> <!--配置远程仓库列表,⽤于多仓库配置--><pluginRepositories/> <!--配置插件仓库列表--></settings><settings xmlns="/SETTINGS/1.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/SETTINGS/1.0.0https:///xsd/settings-1.0.0.xsd"><!-- 本地仓库配置:默认~/.m2/repository[店家推荐修改配置] --><localRepository>${user.home}/.m2/repository</localRepository><!-- 交互⽅式配置,读取⽤户输⼊信息[使⽤默认即可,很少修改] --><interactiveMode>true</interactiveMode><!-- 是否启⽤独⽴的插件配置⽂件,⼀般很少启⽤[默认即可,很少修改] --><usePluginRegistry>false</usePluginRegistry><!-- 是否启⽤离线构建模式,⼀般很少修改[如果长时间不能联⽹的情况下可以修改] --><offline>false</offline><!-- 是否启⽤插件groupId ⾃动扫描[很少使⽤,配置插件时建议全信息配置] --><pluginGroups><pluginGroup>org.apache.maven.plugins</pluginGroup></pluginGroups><!--配置服务端的⼀些设置如⾝份认证信息(eg: 账号、密码) --><servers><!--服务器元素包含配置服务器时需要的信息 --><server><!--这是server 的id (注意不是⽤户登陆的id )该id 与distributionManagement 中repository 元素的id 相匹配。

Mavenpom.xml详解

Mavenpom.xml详解

Mavenpom.xml详解⼀、pom 简介POM 是项⽬对象模型 (Project Object Model) 的简称, XML 格式,名称为 pom.xml ,它是 Maven 项⽬的核⼼配置⽂件,该⽂件⽤于管理源代码、配置⽂件、开发者的信息和⾓⾊、问题追踪系统、组织信息、项⽬授权、项⽬的url、项⽬的依赖关系等等.事实上,在 Maven 的世界中,⼀个项⽬可以什么都没有,甚⾄没有代码,但是必须包含 pom.xml ⽂件.并且⼀个 Maven 项⽬有且只有⼀个 pom.xml ⽂件,该⽂件必须在项⽬的根⽬录下.⼆、pom.xml 完整结构<project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><!-- 基本设置 The Basics --><groupId>...</groupId><artifactId>...</artifactId><version>...</version><packaging>...</packaging><dependencies>...</dependencies><parent>...</parent><dependencyManagement>...</dependencyManagement><modules>...</modules><properties>...</properties><!-- 构建过程的设置 Build Settings --><build>...</build><reporting>...</reporting><!-- 项⽬信息设置 More Project Information --><name>...</name><description>...</description><url>...</url><inceptionYear>...</inceptionYear><licenses>...</licenses><organization>...</organization><developers>...</developers><contributors>...</contributors><!-- 环境设置 Environment Settings --><issueManagement>...</issueManagement><ciManagement>...</ciManagement><mailingLists>...</mailingLists><scm>...</scm><prerequisites>...</prerequisites><repositories>...</repositories><pluginRepositories>...</pluginRepositories><distributionManagement>...</distributionManagement><profiles>...</profiles></project>我们这⾥就选择⼀些⽐较常⽤的配置来说三、pom 常⽤配置1、坐标坐标是⼀个项⽬的唯⼀标识符,可以通过坐标准确的定位到某⼀个具体的项⽬.有了坐标进⾏定位之后,如果其它的 Maven 项⽬想使⽤该项⽬⽣成的 jar 包,只需要通过坐标引⼊依赖即可Maven 坐标是通过 groupId、artifactId、version 来共同定位的.groupId: 组织 Id ,表⽰当前模块所⾪属的项⽬.起名规范:⼀级域名(com、org).⼆级域名(公司名称).项⽬名称artifactId: 模块 Id, 表⽰⼀个项⽬中的某个模块,例如商城项⽬⾥⾯的订单模块、⽤户模块、商品模块...等等version:当前的版本为什么坐标需要三个元素才能定位呢?⽐如你⾃⼰的项⽬中需要使⽤某⼀个 jar 包,那么怎么找到这个 jar 包呢?这个时候你就需要使⽤ groupId 来定位这个 jar 包是属于哪个公司的哪个项⽬,定位到了项⽬之后呢,你还需要使⽤ artifactId 定位到该项⽬的具体模块,因为⼀个项⽬可以有很多的模块,定位到了具体模块之后呢,还需要使⽤ version 来定位具体的版本号,因为⼀个模块可以进⾏迭代,如果不指定具体的版本号也就⽆法准确的定位,这个类似于地理⾥⾯只有通过东经和北纬才能准确定位⼀个地理位置⼀样.<!-- 组织 Id --><groupId>com.xiaomaomao.springAnalyse</groupId><!-- 模块 Id --><artifactId>spring-ioc</artifactId><!-- 具体的版本号 --><version>1.0-SNAPSHOT</version>2、全局变量 propertiesproperties: 全局属性,⼀般情况下⽤于定义全局的 jar 包版本.仅仅是定义全局变量,不起其他作⽤.应⽤场景:在实际项⽬中如果我们使⽤同⼀个公司的 jar 包, jar 包的版本号最好是保持⼀致,因为有时候 jar 包版本不⼀致的情况下,有可能会出现不同版本之间发⽣不兼容的错误, 我们这⾥就以 spring 为例,下⾯的这些依赖当中 spring-context、spring-webmvc 都是属于 spring 的 jar 包,并且它们的版本号都是 4.3.11.RELEASE,突然有⼀天,项⽬经理兴奋的告诉我,spring 推出了 5.0 版本,功能很强⼤,我们要升级版本,那么这个时候你就只能挨个的找到 spring 相关的依赖,⼀个⼀个的把它们升级到 5.0 版本,我们这⾥仅仅只有两个 spring 相关的依赖,改起来⽐较快,可是如果你的项⽬⾥⾯使⽤了⼏⼗个,甚⾄上百个 spring 的依赖呢?这个时候你挨个挨个的去替换,⼯作量⽐较⼤,并且还有可能⼀不留神改错了,好不容易改完了,也没有改错,终于可以休息⼀下了,这个时候项⽬经理那个糟⽼头⼦⼜来了,他告诉你 spring 5.0 有版本缺陷,我们还是改回原来的 4.3.11.RELEASE 版本吧,我想此时你是奔溃的,你就只能挨个挨个的将 spring 的依赖 jar 包⼀个⼀个的还原,好了,还原了,也改好了,终于没事了,你冷不丁的冒出⼀个念头,万⼀项⽬经理⼜要我切换成其它的版本,⼯作量太⼤了,有没有什么⽐较好的办法呢?答案是有的,我们就可以通过 properties 标签来统⼀管理 jar 包的版本<dependencies><!-- spring 基本依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>4.3.11.RELEASE</version></dependency><!-- spring-webmvc 依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.11.RELEASE</version></dependency><!-- juint 依赖 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><!-- servlet-api 依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.0</version><scope>provided</scope></dependency></dependencies>在 <properties> 标签中定义⼀类 jar 包的版本,引⼊依赖的时候通过 ${标签名} 的⽅式来控制版本<properties><!--标签名称任意,但是最好是⼀个有意义的名称--><spring-version>4.3.11.RELEASE</spring-version><junit-version>4.11</junit-version><javax.servlet-version>4.0.0</javax.servlet-version></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><!--使⽤ ${⾃定义的标签} 来引⼊ properties 中定义的标签⾥⾯的值--><version>${spring-version}</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring-version}</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>${junit-version}</version><scope>test</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>${javax.servlet-version}</version><scope>provided</scope></dependency></dependencies>如果以后想统⼀切换 spring、junit 等 jar 包的版本,我们只需要在 properties 标签中切换就可以了,再也不⽤去依赖中挨个挨个的替换 jar 包的版本了3、dependencydependency 标签统⼀的定义在 dependencies 标签中,它代表的意思是我们可以通过该标签引⼊我们需要的相关 jar 包3.1、如何查找⼀个 jar 包的地址?Maven 依赖官⽹:3.1.1、进⼊官⽹,查找需要的 jar 包3.1.2、选择 jar 包版本3.1.3、复制依赖到项⽬ pom.xml 中3.2、如何查看引⼊的依赖4、依赖的 scope 作⽤域依赖的 scope 标签表⽰的意思是依赖的使⽤范围(也就是这个 jar 包在什么范围内是可以使⽤的),scope 的取值有 compile、test、provided、runtime、system 4.1、compile该依赖可以在整个项⽬中使⽤(是指代码范围, main ⽬录和 test ⽬录下都能使⽤这个依赖),参与打包部署.是 scope 的默认值.典型的例如: commons f ileupload 例如:我们修改 spring 核⼼依赖 spring-context 的 scope 为 test<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring-version}</version><scope>test</scope></dependency>在 main ⽬录下使⽤就出现了报错在 test ⽬录下使⽤就是正常的4.2、test该依赖只能在测试代码中使⽤(是指代码范围,只能在 test ⽬录下使⽤这个依赖),不参与打包部署.典型的例如: junit4.3、provided该依赖编写源代码时需要使⽤,因为当我们使⽤ Servlet 的时候,如果不添加 javax.servlet-api 依赖,就⽆法使⽤⾥⾯相关的 API,如果使⽤了编译就会报错,provided 不参与打包部署.只是在编写源码的时候使⽤,为什么不参与打包部署呢?因为我们的项⽬打包部署到服务器的时候,服务器会为我们提供 javax.servlet-api ,这⾥以 tomcat 为例,找到 tomcat 的安装⽬录,打开⾥⾯的 lib ⽬录,在 tomcat 容器启动的时候会为我们提供 servlet-api.jar ,那么我们项⽬中的 pom.xml 中就不需要再提供 servlet-api 这个依赖了4.4、runtime该依赖编写代码时不需要,运⾏时需要,参与打包部署.典型的例如数据库驱动 mysql-connector-java<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency>为什么编写代码时不需要呢?jvm 运⾏期的时候通过反射加载数据库驱动,完成例如注册驱动、获取连接、获取 PrepareStatement 对象等,我们编写代码的时候只是在编译期间,根本不会使⽤到数据库驱动,项⽬最终打包部署的时候也是需要数据驱动的,否则你⽆法连接数据库和操作 Sql 语句.4.5、system表⽰使⽤本地系统路径下的 jar 包,需要和 systemPath 配合使⽤,典型的例如 Oracle 数据库驱动: ojdbc.jar ,它是未授权 Maven 中央仓库的(刚刚去 Maven 中央仓库发现有,但是我们就假设它没有被Maven 中央仓库录⼊)有些 jar 包可能因为授权的问题或者是⼀些个⼈的 jar 包,这些 jar 包不会被 Maven 中央仓库录⼊,这个时候如果我们想在项⽬中使⽤这些 jar 包的话,我们可以先将 jar 包下载先来,然后可以在 pom.xml 中配置指向本地某个 jar 包的路径,引⼊相关的 jar 包对主程序是否有效对测试程序是否有效是否参与打包是否参与部署典型例⼦compile 是是是是spring-context test 否是否否junit provided 是是否否servlet-api 、jsp-api runtime 否否是是mysql-connector-java system -----引⼊ Oracle 驱动之后就可以使⽤了,没有出现报错其实吧,我觉得如果某些 jar 包 Maven 中央仓库没有录⼊,我们可以将需要的 jar 包下载下来,然后上传到私服中,通过左边从私服中下载就可以了.这⾥总结⼀下 scope 依赖范围4.6、远程仓库 repositoriesrepositories:⽤来配置当前⼯程使⽤的远程仓库依赖查找顺序:本地仓库--->当前⼯程 pom.xml 中配置的远程仓库--->⽤户级别的 settings.xml 中配置的远程仓库----> 全局 settings.xml 中配置的远程仓库---->Maven 中央仓库应⽤场景:如果有些 jar 包在 Maven 中央仓库没有,但是在其他仓库(例如:阿⾥仓库、spring 仓库、mybatis 仓库)⾥是有这个 jar 包的,例如 spring 新发布了⼀个版本,由于是刚发⾏的版本,性能不太稳定,这个时候Maven 中央仓库⼀般不会将这些 jar 包录⼊,但是你就是想⽤ spring 最新的版本,那么可以在 pom.xml 中通过配置 repositories 从指定的某公司官⽅仓库来获取相应的 jar 包<repositories><!-- 配置 spring 官⽅仓库 --><repository><!-- 远程仓库唯⼀标识符 --><id>spring_repo</id><!-- 仓库名称,可以使⽤⼀个有意义的名称命名 --><name>Private Repository</name><!-- spring 官⽅远程仓库地址 --><url>http://repo.spring.io/milestone</url><!-- ⽤于定位和排序构件的仓库布局类型,它的取值有 default(默认)或 legacy(遗留) --><layout>default</layout><releases><!-- 是否开启 release 或者 snapshots 的下载⽀持.默认值为 false ,表⽰不会从该中央仓库下载快照版本的构件 --><enabled>true</enabled><!-- ⽤来配置 Maven 从远程仓库检查更新的频率,默认是 daily,表⽰每天检查⼀次;never: 从不检查更新;always: 每次构建都检查更新;interval:X 每隔 X 分钟检查⼀次更新 --><updatePolicy>always</updatePolicy><!--⽤来配置 Maven 检查检验和⽂件的策略,当构建被部署到Maven 仓库中时,会同时部署对于应⽤的检验和⽂件,在下载构件的时候, Maven 会验证校验和⽂件checksumPolicy 默认值是 warn ,会执⾏构建时输出警告信息fail :遇到校验和错误就构件失败ignore :完全忽略校验和错误 --><checksumPolicy>warn</checksumPolicy></releases><snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots></repository><!-- 配置 阿⾥ 官⽅远程仓库 --><repository><id>alimaven</id><name>aliyun maven</name><url>/nexus/content/groups/public/</url></repository></repositories>4.7、插件 plugins插件,就是⼀种⼯具.常见的如:清理插件 maven c lean p lugin ,编译插件 maven c ompile p lugin插件和依赖的区别:插件是⼯具,偏向于开发环境.和项⽬功能、源码、打包好的 jar 包没有任何关系.插件和依赖的关系,类似于 IDEA ⼯具和上线的 jar 包.Maven 的核⼼⽂件很⼩,主要的任务都是由插件来完成.定位到:%本地仓库%\org\apache\maven\plugins ,可以看到⼀些下载好的插件4.7.1、插件的⽬标 (Plugin Goals)⼀个插件通常可以完成多个任务,每⼀个任务就叫做插件的⼀个⽬标.如执⾏ mvn install 命令时,调⽤的插件和执⾏的插件⽬标如下4.7.2、将插件绑定到⽣命周期Maven 的⽣命周期是抽象的,实际需要插件来完成任务,这⼀过程是通过将插件的⽬标 (goal) 绑定到⽣命周期的具体阶段 (phase) 来完成的.例如将 maven-compiler-plugin 插件的 compile ⽬标绑定到 default ⽣命周期的 compile 阶段,完成项⽬的源代码编译.Maven 对⼀些⽣命周期的阶段(phase)默认绑定了插件⽬标,因为不同的项⽬有 jar、war、pom 等不同的打包⽅式,因此对应的有不同的绑定关系,其中针对 default ⽣命周期的 jar 包打包⽅式的绑定关系如下第⼆列中,冒号后⾯即是绑定的插件⽬标,冒号前⾯是插件的前缀(prefix),是配置和使⽤插件的⼀种简化⽅式.4.7.3、⾃定义绑定⽤户可以根据需要将任何插件⽬标绑定到任何⽣命周期的阶段, 例如将 maven-source-plugin 的 jar-no-fork ⽬标绑定到 default ⽣命周期的 package 阶段, 这样,以后在执⾏ mvn package 命令打包项⽬时,在 package 阶段之后会执⾏源代码打包,⽣成如 ehcache-core-2.5.0-sources.jar 形式的源码包.<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-source-plugin</artifactId><version>2.2.1</version><executions><execution><id>attach-source</id><!-- 要绑定到的⽣命周期的阶段 --><phase>package</phase><goals><!-- 要绑定的插件的⽬标 --><goal>jar-no-fork</goal></goals></execution></executions></plugin></plugins>……</build>4.7.4、pom.xml 中配置插件<build><plugins><plugin><!-- 在这⾥添加 clean 插件,可以替换掉之前插件的版本 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-clean-plugin</artifactId><version>3.0.0</version></plugin><plugin><!-- ⼀般 web 项⽬需要添加⼀个 tomcat 插件 --><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><!-- 这⾥还可以配置 tomcat 的项⽬访问 URL 和项⽬访问端⼝ --><configuration><path>/xiaomaomao</path><port>8888</port></configuration></plugin></plugins></build>这⾥有个很奇怪的现象,我使⽤ IDEA 帮我创建 Web 项⽬, IDEA ⾃动帮我下载了插件,其中 maven-clean-plugin 插件的版本是 3.1.0 ,我这⾥把插件的版本替换成了 3.0.0然后看⼀下我们加⼊的 maven-tomcat 插件五、超级 pom当我们利⽤ IDEA 为我们创建⼯程的时候,我们没有进⾏任何配置,为什么能下载各种插件呢?这是由于存在超级 pom 的原因,所有的 Maven 项⽬都要继承超级 pom,⾥⾯有 Maven 默认的⼀些配置超级 pom 存放位置: Maven 的安装⽬录\bin\maven-model-builder-3.6.0.jar\org\apache\maven\model\pom-4.0.0.xml解压开 maven-model-builder-3.6.0.jar 这个压缩包,⾥⾯有两个⽬录在 org/apache/maven/model/ ⽬录下有⼀个 pom-4.0.0.xml ,这个 pom 就是超级 pom ,例如⾥⾯就配置了相关的仓库信息。

史上最全的maven的pom.xml文件详解(转载)

史上最全的maven的pom.xml文件详解(转载)

史上最全的maven的pom.xml⽂件详解(转载)此⽂出处:——1<project xmlns="/POM/4.0.0"2xmlns:xsi="/2001/XMLSchema-instance"3xsi:schemaLocation="/POM/4.0.0 /maven-v4_0_0.xsd ">45<!-- ⽗项⽬的坐标。

如果项⽬中没有规定某个元素的值,那么⽗项⽬中的对应值即为项⽬的默认值。

6坐标包括group ID,artifact ID和 version。

-->7<parent>8<!-- 被继承的⽗项⽬的构件标识符 -->9<artifactId>xxx</artifactId>1011<!-- 被继承的⽗项⽬的全球唯⼀标识符 -->12<groupId>xxx</groupId>1314<!-- 被继承的⽗项⽬的版本 -->15<version>xxx</version>1617<!-- ⽗项⽬的pom.xml⽂件的相对路径。

相对路径允许你选择⼀个不同的路径。

默认值是../pom.xml。

18 Maven⾸先在构建当前项⽬的地⽅寻找⽗项⽬的pom,其次在⽂件系统的这个位置(relativePath位置),19然后在本地仓库,最后在远程仓库寻找⽗项⽬的pom。

-->20<relativePath>xxx</relativePath>21</parent>2223<!-- 声明项⽬描述符遵循哪⼀个POM模型版本。

模型本⾝的版本很少改变,虽然如此,但它仍然是必不可少的,24这是为了当Maven引⼊了新的特性或者其他模型变更的时候,确保稳定性。

聊聊maven的pom.xml中的exclusions标签的作用

聊聊maven的pom.xml中的exclusions标签的作用

聊聊maven的pom.xml中的exclusions标签的作⽤maven pom.xml的exclusions标签作⽤项⽬中的例⼦<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency>解释exclusion标签这个标签的作⽤是排除关联依赖的引⼊,因为maven的pom依赖其中有⼀点是将关联的依赖全都引⼊进来,这个标签在这的作⽤就是如果关联的依赖和引⼊的其他依赖可能存在冲突,就必须将关联的依赖排除掉,所以就⽤这个标签。

另外这个+s的,⼤家应该也明⽩,就是可以包含多个吗⽤exclusions来进⾏排除依赖exclusions但依赖调节并不解决所有问题,我们还需要exclusions来进⾏排除依赖。

例如这样⼀个情况,⼯程中引⼊了A,A依赖B,但是B的版本过旧。

此时可以使⽤exclusions排除该传递性依赖,并显⽰声明⼀个最新版本的B依赖。

⽐如这样<dependency><groupId>com.lowagie</groupId><artifactId>itext</artifactId><version>4.2.1</version><exclusions><exclusion><artifactId>bcmail-jdk14</artifactId><groupId>bouncycastle</groupId></exclusion><exclusion><artifactId>bcprov-jdk14</artifactId><groupId>bouncycastle</groupId></exclusion><exclusion><artifactId>bctsp-jdk14</artifactId><groupId>bouncycastle</groupId></exclusion></exclusions></dependency>在⽐如若是使⽤zookeeper发现有log4j的冲突。

maven项目pom文件中使用其他项目

maven项目pom文件中使用其他项目

Maven是一个强大的项目管理工具,它可以帮助开发人员轻松地管理和构建项目。

在Maven项目中,pom.xml文件是非常重要的配置文件,它包含了项目的所有配置信息和依赖关系。

在实际的项目开发中,经常会遇到需要在当前项目的pom文件中引用其他项目的依赖的情况。

本文将介绍在Maven项目的pom文件中如何使用其他项目,以及常见的注意事项和解决方案。

1. 了解Maven项目的依赖管理在Maven项目中,依赖管理是非常重要的一个功能。

通过在pom.xml文件中配置依赖,可以方便地引用第三方库或其他项目的模块,从而避免了手动管理jar包的繁琐工作。

Maven会自动下载并管理项目所需的依赖,大大简化了项目的构建和部署过程。

2. 在pom文件中引用其他项目的依赖要在当前项目的pom文件中引用其他项目的依赖,可以使用Maven的<dependency>标签来定义。

在<dependency>标签中,需要指定依赖的groupId、artifactId和version等信息。

例如:``` xml<dependency><groupId.example</groupId><artifactId>another-project</artifactId><version>1.0.0</version></dependency>```在上面的例子中,我们引用了groupId.example,artifactId为another-project,版本号为1.0.0的项目作为当前项目的依赖。

3. 使用其他项目的本地路径有时候,我们可能需要引用本地文件系统中的其他项目作为依赖。

这种情况下,可以使用<systemPath>标签来指定本地路径。

例如:``` xml<dependency><groupId.example</groupId><artifactId>local-project</artifactId><version>1.0.0</version><scope>system</scope><systemPath>/path/to/local-project.jar</systemPath></dependency>```在上面的例子中,我们将本地路径/path/to/local-project.jar下的项目作为依赖引入到当前项目中。

pom.xml详解

pom.xml详解

parent的使用方法如下:
<parent>
<groupId>org.codehaus.mojo</groupId>
<artifactId>my-parent</artifactId>
<version>2.0</version>
<relativePath>../my-parent</relativePath>
<groupId>com.alibaba.external</groupId>
</exclusion>
....
</exclusions>
......
</dependencies>
其中groupId, artifactId, version这三个组合标示依赖的具体工程,而且 这个依赖工程必需是maven中心包管理范围内的,如果碰上非开源包,maven支持不了这个包,那么则有有三种 方法处理:
<java.target.version>1.5</java_target_version>
</.encoding}
还可以使用project.xx引用pom里定义的其它属性:如$(project.version}
<!--maven2.0必须是这样写,现在是maven2唯一支持的版本-->
<!-- 基础设置 -->
<groupId>...</groupId>
<artifactId>...</artifactId>

maven pom文件pluginrepositories标签详解

maven pom文件pluginrepositories
标签详解
在 Maven的`pom`文件中,`repositories`标签的作用是配置maven项目的远程仓库。

示例如下:
```xml
<repositories>
<repository>
<id>nexus</id>
<name>Nexus Repository</name>
<url>远程仓库地址</url>
<releases><enabled>true</enabled></releases>
<snapshots><enabled>true</enabled> <!--snapshots默认是关闭的,需要开启 --></snapshots>
</repository>
</repositories>
```
按照上述配置,可以实现配置maven项目的远程仓库。

这样的配置在创建一个项目时,需要配置一次,比较麻烦。

在`pluginRepositories`标签中,可以配置 Maven从什么地方下载插件构件。

该元素的内部配置和`repository`完全一样,不再解释。

maven pom 空参数

maven pom 空参数在Maven项目中,POM(Project Object Model)是一个XML文件,用于描述项目的配置信息和依赖关系。

当我们在POM文件中遇到空参数时,可能指的是以下几种情况:1. 空的<groupId>、<artifactId>、<version>参数,这些参数是必需的,用于唯一标识一个Maven项目。

如果这些参数为空,将导致构建失败。

通常,我们需要在POM文件中填写正确的参数值。

2. 空的<dependencies>参数,在<dependencies>标签中,我们定义项目所依赖的外部库。

如果这个参数为空,说明项目没有任何依赖,或者依赖已经在其他地方定义。

这种情况下,<dependencies>标签可以省略,或者保留空标签。

3. 空的<properties>参数,在<properties>标签中,我们可以定义一些属性,用于在POM文件中引用。

如果这个参数为空,说明项目没有定义任何属性。

这种情况下,<properties>标签可以省略,或者保留空标签。

4. 空的<build>参数,在<build>标签中,我们可以定义项目的构建配置,例如编译器版本、资源过滤、插件等。

如果这个参数为空,说明项目没有特殊的构建需求,可以使用Maven的默认配置。

这种情况下,<build>标签可以省略,或者保留空标签。

需要注意的是,空参数可能会导致构建失败或不符合预期的行为。

因此,在编写POM文件时,我们应该根据项目的实际需求,填写正确的参数值或者删除不需要的标签。

同时,我们还可以通过Maven插件和配置来进一步定制项目的构建过程。

(转)如何在maven的pom.xml中添加本地jar包

(转)如何在maven的pom.xml中添加本地jar包1 maven本地仓库认识maven本地仓库中的jar⽬录⼀般分为三层:图中的1 2 3分别如下所⽰:1 groupId2 artifactId3 version 4 jar包的依赖如果要将maven本地仓库中的jar包添加到项⽬中,直接打开4 xx.pom⽂件,将改jar包的相关依赖复制pom.xml⽂件中即可。

2 将本地jar包添加到本地仓库2.1 添加jar到本地仓库原则上Maven的设计是不需要这么做的,因为pom.xml中依赖的jar包会⾃动实现从中央仓库下载到本地仓库。

但也有特殊情况。

⽐如我下载了lucene-queryparser-4.6.1.jar怎么添加jar到本地仓库呢?步骤:1.cmd命令进⼊该jar包所在路径(快捷键:shift+右键选择在此处打开命令⾏窗⼝)ps:jar包可以在任意⼀个⽂件夹⽬录下⾯,不要放在分区的根⽬录,也不要⾃⼰去创建maven中的相关⽬录。

不需要去创建相关⽬录,mvn install之后会⾃动将相关的jar包放⼊本地仓库。

2.执⾏命令:mvn install:install-file -Dfile=lucene-queryparser-4.6.1.jar -DgroupId=org.apache.lucene -DartifactId=lucene-queryparser -Dversion=4.6.1 -Dpackaging=jar其中:-DgroupId和-DartifactId的作⽤是指定了这个jar包在repository的安装路径,只是⽤来告诉项⽬去这个路径下寻找这个名称的jar包。

⼀般⽤的jar包都是在mven仓库中下载的,所以groupId和artifactId直接将复制maven仓库中的设置即可。

<!-- https:///artifact/org.apache.lucene/lucene-queryparser --><dependency><groupId>org.apache.lucene</groupId><artifactId>lucene-queryparser</artifactId><version>4.6.1</version></dependency>⽐如:mvn install:install-file -Dfile=hadoop-hdfs-2.2.0.jar -DgroupId=org.apache.hadoop -DartifactId=hadoop-hdfs -Dversion=2.2.0 -D -Dpackaging=jar就是指把hadoop-hdfs-2.2.0.jar安装到repository\org.apache.hadoop\hadoop-hdfs\2.2.0⽬录下,执⾏完命令后,如果需要在项⽬中使⽤这个jar,则在pom.xml中添加如下配置即可:<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>2.2.0</version></dependency>ps:执⾏上述命令后,在该jar包所在⽬录中会⽣成⼀个 jar包名字.pom的⽂件,⾥⾯有描述改jar包的坐标信息。

maven的pom.xml中profiles的作用详解

maven的pom.xml中profiles的作⽤详解⽬录1、profiles是什么?有什么作⽤2、如何配置3、区别构建发布包maven多环境profiles参数切换项⽬结构图1、profiles是什么?有什么作⽤在maven构建的项⽬都存在⼀个pom.xml的项⽬对象模型配置⽂件,⽤于约束项⽬(如:jar包管理、构建管理等)。

profiles 是pom.xml中的⼀个配置项。

我们在开发项⽬时⼀般都会区分线上环境和测试环境,这两个环境需要切换以适应不同的环境需求正式环境的配置,⼀般放置于src/main/resources下,⽽测试环境放置于/src/test/resources下⾯。

profile的主要作⽤就是区分正式环境和测试环境的配置2、如何配置<profiles><profile><id>release</id><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes></resource></resources></build></profile><profile><id>test</id><build><resources><resource><directory>src/test/resources</directory><includes><include>config/*.properties</include><include>log4j.xml</include></includes></resource><resource><directory>src/main/resources</directory><includes><include>**/*.xml</include></includes><excludes><exclude>log4j.xml</exclude></excludes></resource></resources></build><activation><activeByDefault>true</activeByDefault></activation></profile></profiles>如上,我配置了两个profile⼀个release⽤于正式环境发布,test⽤于测试环境使⽤;默认开启测试环境,activation->true测试环境与正式环境只是部分的配置不同,我们需要公⽤这部分配置。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

maven POM.xml详解<project xmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/maven-v4_0_0. xsd"><!--父项目的坐标。

如果项目中没有规定某个元素的值,那么父项目中的对应值即为项目的默认值。

坐标包括group ID,artifact ID和version。

--><parent><!--被继承的父项目的构件标识符--><artifactId/><!--被继承的父项目的全球唯一标识符--><groupId/><!--被继承的父项目的版本--><version/><!-- 父项目的pom.xml文件的相对路径。

相对路径允许你选择一个不同的路径。

默认值是../pom.xml。

Maven首先在构建当前项目的地方寻找父项目的pom,其次在文件系统的这个位置(relativePath位置),然后在本地仓库,最后在远程仓库寻找父项目的pom。

--> <relativePath/></parent><!--声明项目描述符遵循哪一个POM模型版本。

模型本身的版本很少改变,虽然如此,但它仍然是必不可少的,这是为了当Maven引入了新的特性或者其他模型变更的时候,确保稳定性。

--><modelVersion>4.0.0</modelVersion><!--项目的全球唯一标识符,通常使用全限定的包名区分该项目和其他项目。

并且构建时生成的路径也是由此生成,如com.mycompany.app生成的相对路径为:/com/mycompany/app--><groupId>asia.banseon</groupId><!-- 构件的标识符,它和group ID一起唯一标识一个构件。

换句话说,你不能有两个不同的项目拥有同样的artifact ID和groupID;在某个特定的group ID下,artifact ID也必须是唯一的。

构件是项目产生的或使用的一个东西,Maven为项目产生的构件包括:JARs,源码,二进制发布和W ARs等。

--><artifactId>banseon-maven2</artifactId><!--项目产生的构件类型,例如jar、war、ear、pom。

插件可以创建他们自己的构件类型,所以前面列的不是全部构件类型--><packaging>jar</packaging><!--项目当前版本,格式为:主版本.次版本.增量版本-限定版本号--><version>1.0-SNAPSHOT</version><!--项目的名称, Maven产生的文档用--><name>banseon-maven</name><!--项目主页的URL, Maven产生的文档用--><url>/banseon</url><!-- 项目的详细描述, Maven 产生的文档用。

当这个元素能够用HTML格式描述时(例如,CDATA中的文本会被解析器忽略,就可以包含HTML标签),不鼓励使用纯文本描述。

如果你需要修改产生的web站点的索引页面,你应该修改你自己的索引页文件,而不是调整这里的文档。

--><description>A maven project to study maven.</description><!--描述了这个项目构建环境中的前提条件。

--><prerequisites><!--构建该项目或使用该插件所需要的Maven的最低版本--><maven/></prerequisites><!--项目的问题管理系统(Bugzilla, Jira, Scarab,或任何你喜欢的问题管理系统)的名称和URL,本例为jira--><issueManagement><!--问题管理系统(例如jira)的名字,--><system>jira</system><!--该项目使用的问题管理系统的URL--><url>/banseon</url></issueManagement><!--项目持续集成信息--><ciManagement><!--持续集成系统的名字,例如continuum--><system/><!--该项目使用的持续集成系统的URL(如果持续集成系统有web接口的话)。

--><url/><!--构建完成时,需要通知的开发者/用户的配置项。

包括被通知者信息和通知条件(错误,失败,成功,警告)--><notifiers><!--配置一种方式,当构建中断时,以该方式通知用户/开发者--><notifier><!--传送通知的途径--><type/><!--发生错误时是否通知--><sendOnError/><!--构建失败时是否通知--><sendOnFailure/><!--构建成功时是否通知--><sendOnSuccess/><!--发生警告时是否通知--><sendOnWarning/><!--不赞成使用。

通知发送到哪里--><address/><!--扩展配置项--><configuration/></notifier></notifiers></ciManagement><!--项目创建年份,4位数字。

当产生版权信息时需要使用这个值。

--><inceptionYear/><!--项目相关邮件列表信息--><mailingLists><!--该元素描述了项目相关的所有邮件列表。

自动产生的网站引用这些信息。

--> <mailingList><!--邮件的名称--><name>Demo</name><!--发送邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建--><post>banseon@</post><!--订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建--><subscribe>banseon@</subscribe><!--取消订阅邮件的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建--><unsubscribe>banseon@</unsubscribe><!--你可以浏览邮件信息的URL--><archive>http://banseon/demo/dev/</archive></mailingList></mailingLists><!--项目开发者列表--><developers><!--某个项目开发者的信息--><developer><!--SCM里项目开发者的唯一标识符--><id>HELLO WORLD</id><!--项目开发者的全名--><name>banseon</name><!--项目开发者的email--><email>banseon@</email><!--项目开发者的主页的URL--><url/><!--项目开发者在项目中扮演的角色,角色元素描述了各种角色--><roles><role>Project Manager</role><role>Architect</role></roles><!--项目开发者所属组织--><organization>demo</organization><!--项目开发者所属组织的URL--><organizationUrl>/banseon</organizationUrl><!--项目开发者属性,如即时消息如何处理等--><properties><dept>No</dept></properties><!--项目开发者所在时区,-11到12范围内的整数。

--><timezone>-5</timezone></developer></developers><!--项目的其他贡献者列表--><contributors><!--项目的其他贡献者。

参见developers/developer元素--><contributor><name/><email/><url/><organization/><organizationUrl/><roles/><timezone/><properties/> </contributor></contributors><!--该元素描述了项目所有License列表。

应该只列出该项目的license列表,不要列出依赖项目的license列表。

如果列出多个license,用户可以选择它们中的一个而不是接受所有license。

相关文档
最新文档