Maven配置文件详解

合集下载

Maven配置说明

Maven配置说明

Maven插件安装步骤一、配置环境变量1、解压apache-maven-3.0.5-bin.gz包到D盘,解压完成后目录D盘会出现如下文件夹apache-maven-3.0.5,完整目录为D:\ apache-maven-3.0.5,如下图所示:2、配置maven 环境变量:系统变量:MAVEN_HOME = D:\apache-maven-3.0.5用户变量:path = %MAVEN_HOME%\bin3、打开cmd,在里面敲:mvn –version会出现Maven的版本信息,这时说明Maven环境变量配置成功了!二、安装Eclipse插件1、修改maven 仓库本地存放位置:在你的 E 盘位置建立这样一个文件夹路径E:\maven\repository 然后配置D:\apache-maven-3.0.5\conf\settings.xml 下的settings.xml 文件,配置(修改54行位置):<localRepository>E:\maven\repository</localRepository>指向刚才所建文件夹目录,如下图所示2、配置完成后在cmd 中敲并回车执行:mvn help:system这时Maven会从远程仓库下载一些的东西,不用管,执行完成后,在刚才所建的文件夹目录会出现以下文件,如下图所示:3、将Eclipse插件包解压,打开Eclipse安装目录,将插件文件夹下的文件放到Eclipse下对应文件夹下(注意:两个目录的文件夹名称是一致的,只拷贝下面的文件即可),好了之后,重启Eclipse,然后在Window --> Preferences目录下就可以看到Maven选项了4、配置maven点击Add 按钮,选到你本机安装maven 的路径值5、 点击 Browse 按钮,选到你 maven 的 setting.xml 配置文件,然后点击 OK ,这样就完成了 eclipse maven 插件的配置6、通过上述步骤,Maven基本上就算搞定了。

【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配置文件详解

maven配置文件详解

maven配置⽂件详解1 ⾸先,setting.xml⼀般存在与两个地⽅:maven的安装⽬录/conf/,和${user.home}/.m2/下。

他们的区别是在maven安装⽬录下的setting.xml是所有⽤户都可以应⽤的配置,⽽user.home下的可想⽽知就是针对某⼀⽤户的配置(推荐是在user.home下)。

如果两个都进⾏了配置,则在应⽤的时候会将两个配置⽂件进⾏中和,⽽且user.home下的setting.xml优先级⼤于maven安装⽬录下的。

2 setting.xml⽂件中顶层元素⼀览:[html]1. <span style="font-family:Microsoft YaHei;"><settings xmlns="/SETTINGS/1.0.0"2. xmlns:xsi="http://www.w/2001/XMLSchema-instance"3. xsi:schemaLocation="/SETTINGS/1.0.04. /xsd/settings-1.0.0.xsd">5. <localRepository/>6. <interactiveMode/>7. <usePluginRegistry/>8. <offline/>9. <pluginGroups/>10. <servers/>11. <mirrors/>12. <proxies/>13. <profiles/>14. <activeProfiles/>15. </settings></span>下⾯对各个元素进⾏解析:2.1 localRepository建构系统本地仓库的路径,不设置的话默认是在{user.home}/.m2/repository/下,如果想要系统所有⽤户共⽤⼀个本地仓库,则可以在maven 安装⽬录下的setting.xml中进⾏设置2.2 interactiveMode指定Maven是否试图与⽤户交互来得到输⼊,默认是true2.3 usePluginRegistry如果设置为true,则在{user.home}/.m2下需要有⼀个plugin-registry.xml来对plugin的版本进⾏管理。

Mavensetting.xml配置文件详解

Mavensetting.xml配置文件详解

Mavensetting.xml配置⽂件详解maven的配置⽂件settings.xml存在于两个地⽅:1.安装的地⽅:${M2_HOME}/conf/settings.xml2.⽤户的⽬录:${user.home}/.m2/settings.xml前者⼜被叫做全局配置,对操作系统的所有使⽤者⽣效;后者被称为⽤户配置,只对当前操作系统的使⽤者⽣效。

如果两者都存在,它们的内容将被合并,并且⽤户范围的settings.xml会覆盖全局的settings.xml。

Maven安装后,⽤户⽬录下不会⾃动⽣成settings.xml,只有全局配置⽂件。

如果需要创建⽤户范围的settings.xml,可以将安装路径下的settings复制到⽬录${user.home}/.m2/。

Maven默认的settings.xml是⼀个包含了注释和例⼦的模板,可以快速的修改它来达到你的要求。

全局配置⼀旦更改,所有的⽤户都会受到影响,⽽且如果maven进⾏升级,所有的配置都会被清除,所以要提前复制和备份${M2_HOME}/conf/settings.xml⽂件,⼀般情况下不推荐配置全局的settings.xml。

settings.xml详解声明规范<?xml version="1.0" encoding="UTF-8"?><settings xmlns="/POM/4.0.0" xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0 /xsd/settings-1.0.0.xsd">localRepository<!-- 本地仓库的路径。

默认值为${user.home}/.m2/repository。

--><localRepository>usr/local/maven</localRepository>interactiveMode<!--Maven是否需要和⽤户交互以获得输⼊。

MAVEN配置文件

MAVEN配置文件

MAVEN2的配置文件有两个settings.xml和pom.xmlsettings.xml:保存的是本地所有项目所共享的全局配置信息,默认在maven安装目录的conf目录下,如果没有安装maven而是用的m2eclipse插件,那么也可以把这个配置文件放在.m2目录下pom.xml:描述项目的配置文件,放在每个项目的根目录下settings.xmllocalRepository:本地仓库位置,默认在.m2\repository\,可以人为更改settings.xml<settings xmlns="/POM/4.0.0"xmlns:xsi=/2001/XMLSchema-instancexsi:schemaLocation="/POM/4.0.0/xsd/settings-1.0.0.xsd"><localRepository>path</localRepository><interactiveMode>true/false</interactiveMode><offline>true/false</offline><servers><server><id>serverid</id><username>username</username><password>password</password></server></servers><mirrors><id>id1</id><name>mirror1</name><url>url</url><mirrorOf>id2</mirrorOf></mirrors><proxies><proxy><id>id</id><active>true</active><protocal>http</protocal><host>ip</host><port>8080</port><username>user</username><password>pass<password></proxy></proxies><profiles/><activeProfiles/></settings>复制代码offline:离线开关,是否每次构建都从远程仓库下载,默认falseservers:对应POM文件的distributionManagement元素里定义id,和登陆服务器的用户名、密码mirrors:定义仓库镜像,将仓库地址指向自定义仓库地址(id:新的镜像ID,name:镜像名称,url:镜像地址,mirrorOf:以那个地址做镜像,默认为central)proxies:设置HTTP代理pom.xmlparent 给出父项目的位置,如果存在上一级父项目的话。

Maven中settings.xml配置文件解释以及例子

Maven中settings.xml配置文件解释以及例子
<!-- 镜像库站点列表 --> <!-- mirrors | This is a list of mirrors to be used in downloading artifacts from remote repositories. | | It works like this: a POM may declare a repository to use in resolving certain artifacts. | However, this repository may have problems with heavy traffic at times, so people have mirrored | it to several places. | | That repository definition will have a unique id, so we can create a mirror reference for that
| getting the most out of your Maven installation. Where appropriate, the default
| values (values used when the setting is not specified) are provided.
|
| 2. Global Level. This settings.xml file provides configuration for all Maven
|
users on a machine (assuming they're all using the same Maven
|
installation). It's normally provided in

【Maven】安装配置、目录结构、配置文件、常见命令

【Maven】安装配置、目录结构、配置文件、常见命令

【Maven】安装配置、⽬录结构、配置⽂件、常见命令1、下载配置maven步骤 a、windows下配置jdk的系统环境变量:java_home b、windows下配置maven的系统环境变量:maven_home或者m2_home c、windows下配置maven的系统环境变量:path %maven_home%\bin d、验证 mvn -v 打开cmd命令⾏⼯具,命令查看maven是否安装配置成功 e、配置本地仓库 maven⽬录/conf/settings.xml默认本地仓库:c:/users/YANQUN/.m2/repostory修改本地仓库:<localRepository>D:/mvnrep</localrepository>2、使⽤maven 约定优于配置 硬编码⽅式:job.setpath("d:\\abc") 配置⽅式:conf.xml <path>d:\\abc</path> 约定:使⽤默认值 d:\\abc3、maven约定的⽬录结构 项⽬ -src -main 程序功能代码 -java java代码 -resources 资源代码、配置代码 -test 测试代码 -java -resources -pom.xml 项⽬对象模型,把⼀个项⽬看成⼀个对象(pom.xml⽂件跟src⽬录在同⼀级⽬录)DOM 把⼀个标签看成⼀个对象pom.xml⽂件: <groupId>域名翻转.⼤项⽬名</groupId> ⽐如:<groupId>nqiao.maven</groupId> <artifactId>⼦模块名</artifactId> ⽐如:<artifactId>HelloWorld</artifactId> <version>版本号</version> ⽐如:<version>0.0.1-SNAPSHOT</version>4、maven依赖: A中的某些类,需要使⽤B中的某些类,则称为A依赖B,⽐如commons-fileupload.jar->commons-io.jar 在maven项⽬中,如果要使⽤⼀个当时不存在的jar或模块,则可以通过依赖实现(去本地仓库、远程仓库(私服、中央)去寻找)通过在pom.xml⽂件中,<dependency></dependency>、<dependencies></dependencies>标签来实现依赖5、dos命令执⾏mvn: 必须在pom.xml所在⽬录中执⾏(打开命令⾏⼯具cmd.exe,执⾏maven的相关命令)6、maven常⽤命令 第⼀次执⾏命令时,因为需要下载执⾏该命令的基础环境(maven基础组件、基础jar包),所以会从远程仓库(私服、中央)下载该环境到本地仓库,以后就不⽤下载 mvn compile --只编译main⽬录中的java⽂件,不编译test⽬录的java⽂件 mvn test --测试,只编译test⽬录中的java⽂件,不编译main⽬录的java⽂件 mvn package --把源代码打包成jar/war包 mvn install --将开发的模块放⼊本地仓库,供其他模块使⽤,放⼊的位置,是通过gav决定的。

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

一.pom.xml详解1.概述pom中节点如下分布2.基本配置modelVersion:pom模型版本,maven2和3只能为4.0.0groupId:组ID,maven用于定位artifactId:在组中的唯一ID用于定位version:项目版本packaging:项目打包方式,有以下值:pom, jar, maven-plugin, ejb, war, ear, rar, par 3.依赖配置3.1 parentgroupId:父项目的构件标识符artifactId:父项目的唯一标识符relativePath:Maven首先在当前项目的找父项目的pom,然后在文件系统的这个位置(relativePath),然后在本地仓库,再在远程仓库找。

version:父项目的版本3.2 modules有些maven项目会做成多模块的,这个标签用于指定当前项目所包含的所有模块。

之后对3.3 properties3.4 dependencies项目相关依赖配置,如果在父项目写的依赖,会被子项目引用,一般父项目会将子项目公用的依赖引入(将在之后详细讲解)这边依赖和中央仓库中的一致,就可以引入对应的jar3.5 dependencyManagement配置写法同dependencies本号:父项目:子项目:这样的好处是,父项目统一了版本,而且子项目可以在需要的时候才引用对应的依赖4.构建配置4.1 build4.2 reporting该元素描述使用报表插件产生报表的规范。

当用户执行“mvn site”,这些报表就会运行。

在页面导航栏能看到所有报表的链接。

5.项目信息name:给用户提供更为友好的项目名description:项目描述,maven文档中保存url:主页的URL,maven文档中保存inceptionYear:项目创建年份,4位数字。

当产生版权信息时需要使用这个值licenses:该元素描述了项目所有License列表。

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

如果列出多个license,用户可以选择它们中的一个而不是接受organization: 组织名2.url 组织主页url developers:项目开发人员列表(如下)6.环境设置6.1 issueManagement目的问题管理系统(Bugzilla, Jira, Scarab)的名称和URLurl:路径6.2 ciManagementurl:持续集成系统的URLnotifiers:构建完成时,需要通知的开发者/用户的配置项。

包括被通知者信息和通知条件(错误,失败,成功,警告)type:通知方式sendOnError:错误时是否通知sendOnFailure:失败时是否通知sendOnSuccess:成功时是否通知sendOnWarning:警告时是否通知address:通知发送到的地址configuration:扩展项6.3 mailingLists项目相关邮件列表信息subscribe, unsubscribe: 订阅邮件(取消订阅)的地址或链接,如果是邮件地址,创建文档时,mailto: 链接会被自动创建archive:浏览邮件信息的URLpost:接收邮件的地址6.4 scmconnection, developerConnection:这两个表示我们如何连接到maven的版本库。

connection 只提供读,developerConnection将提供写的请求写法如:scm:[provider]:[provider_specific]如果连接到CVS仓库,可以配置如下:scm:cvs:pserver:127.0.0.1:/cvs/root:my-project tag:项目标签,默认HEADurl:共有仓库路径6.5 prerequisites6.6 repositories,pluginRepositoriesreleases, snapshots:这是各种构件的策略,release或者snapshot。

这两个集合,POM就可以根据独立仓库任意类型的依赖改变策略。

如:一个人可能只激活下载snapshot用来开发。

enable:true或者false,决定仓库是否对于各自的类型激活(release 或者snapshot)。

updatePolicy: 这个元素决定更新频率。

maven将比较本地pom的时间戳(存储在仓库的maven数据文件中)和远程的. 有以下选择: always, daily (默认), interval:X (x是代表分钟的整型) ,never.checksumPolicy:当Maven向仓库部署文件的时候,它也部署了相应的校验和文件。

可选的为:ignore,fail,warn,或者不正确的校验和。

layout:在上面描述仓库的时候,提到他们有统一的布局。

Maven 2有它仓库默认布局。

然而,Maven 1.x有不同布局。

使用这个元素来表明它是default还是legacy。

6.7 distributionManagementdownloadUrl: 其他pom可以通过此url的仓库抓取组件status:给出该构件在远程仓库的状态none: 默认converted: 将被早期Maven 2 POM转换过来partner: 这个项目会从合作者仓库同步过来deployed: 从Maven 2或3实例部署verified: 被核实时正确的和最终的6.8 Repository指定Maven pom从远程下载控件到当前项目的位置和方式,如果snapshotRepository没有被id, name:仓库的唯一标识uniqueVersion:true或false,指明控件部署的时候是否获取独立的版本号。

url:repository元素的核心。

指定位置和部署协议发布控件到仓库。

layout:布局,default或legacy6.9 Site Distribution多分布存储库,distributionManagement负责定义如何部署项目的网站和文档。

id, name, url: 这些元素与distributionManagement repository中的相同6.10 Relocation重新部署-项目不是静态的,是活的。

他们需要被搬到更合适的地方。

如:当你的下个成功的开源项目移到Apache下,重命名为org.apache:my-project:1.0 对你项目更有好处。

6.11 profilesprofile可以让我们定义一系列的配置信息(插件等),然后指定其激活条件profile的相关配置可以参考–setting.xml详解参考文档:/oDeviloo/article/details/52050277二. setting.xml详解1.文件概览通过配置文件中的注释,我们可以看到,有两种配置此文件的方法2.localRepositorylocalRepository用于构建系统的本地仓库的路径。

默认的值是${user.home}/.m2/repository。

3.interactiveModeinteractiveMode 用于决定maven是否在需要输出的时候提示你,默认true。

如果是false,它将使用合理的默认值,或者基于一些设置。

4.offline决定maven是否在构建的时候进行网络传输。

默认false,表示联网状态,true为取消联网。

在某些情况下设置为true是很有用的,比如jar无法从网上下载等5.pluginGroupspluginGroups 插件组这样Maven可以使用简单的命令执行org.morbay.jetty:jetty-maven-plugin:run我们同样可以在pom文件中看到相似的配置,只是在这配置了就起到全局的作用,而不用每个项目中pom配置jetty6.proxies此项用于设置http代理有时候由于安全问题,需要配置http代理,通过代理服务才能正常访问外部仓库下载资源可以ping 来访问中央仓库telnet 218.14.227.197 3128 来查看代理地址以及端口是否畅通id:proxy的唯一标识,用来区别proxy元素。

active:表示是否激活代理,如果配置多个,默认是第一个生效username,password:提供连接代理服务器时的认证。

host,port:主机地址,端口号nonProxyHosts:用来表示哪些主机名不需要代理,可以用|来分割多个,此外也支持通配符,如:*表示所有以结尾的都不需要通过代理7.servers这是一个认证配置的列表,根据系统中使用的server-id控制。

认证配置在maven连接到远程服务时使用。

8.mirrorsid:用于继承和直接查找,唯一mirrorOf:镜像所包含的仓库的Idname:唯一标识,用于区分镜像站url:镜像路径9.profiles1.settings.xml中时意味着该profile是全局的,所以只能配置范围宽泛一点配置信息,比如远程仓库等。

而一些比较细致一点的需要定义在项目的pom.xml中。

2.profile可以让我们定义一系列的配置信息,然后指定其激活条件。

根据每个profile对应不同的激活条件和配置信息,从而达到不同环境使用不同配置。

例子:通过profile定义jdk1.5以上使用一套配置,jdk1.5以下使用另外一套配置;或者通过操作系统来使用不同的配置信息。

3.settings.xml中的信息有repositories、pluginRepositories和properties。

定义在properties的值可以在pom.xml中使用。

下面的例子是从官网翻译的,大家有疑问还可以去官网查看Activationjdk:检测到对应jdk版本就激活os:针对不同操作系统property:当maven检测到property(pom中如${name}这样的)profile将被激活file:如果存在文件,激活,不存在文件激活通过以下命令查看哪些profile将生效properitesMaven的属性是值占位符,就像Ant中的一样。

如果X是一个属性的话,在POM中可以使用${X}来进行任意地方的访问。

他们来自于五种不同的风格,所有都可以从settings.xml文件中访问到。

1.env.x:“env.”前缀会返回当前的环境变量。

如${env.PATH}就是使用了$path环境变量(windosws中的%PATH%)。

2.project.x:一个点“.”分割的路径,在POM中就是相关的元素的值。

例如:<project><version>1.0</version></project>就可以通过${project.version}来访问。

相关文档
最新文档