设为首页 收藏本站
查看: 1742|回复: 0

[经验分享] Apache Maven 3.5.0配置安装

[复制链接]
发表于 2017-12-24 08:56:16 | 显示全部楼层 |阅读模式
  1、maven 3.5 下载地址:http://maven.apache.org/download.cgi
DSC0000.png

  2、下载了解压到
DSC0001.png

  3、配置环境变量
   DSC0002.png DSC0003.png
  4、测试看是否安装成功
DSC0004.png

  5、maven配置(全局配置,用户配置)
  3.1、全局配置 
  在maven安装目录的conf里面有一个settings.xml文件,这个文件就是maven的全局配置文件。
  该文件中配置来maven本地仓库的地址
DSC0005.png

DSC0006.png

  默认在系统的用户目录下的m2/repository中,该目录是本地仓库的目录。
DSC0007.png

  5.2、用户配置
  用户配置文件的地址:~/.m2/settings.xml,该文件默认是没有,需要将全局配置文件拷贝一份到该目录下。
DSC0008.png

  重新指定本地仓库地址,如果不指定,则默认是~/.m2/repository目录,如果用户配置文件不存在,则使用全局配置文件的配置。
一、Maven常用命令
1.1、Maven 参数
  -D 传入属性参数
  -P 使用pom中指定的配置
  -e 显示maven运行出错的信息
  -o 离线执行命令,即不去远程仓库更新包
  -X 显示maven允许的debug信息
  -U 强制去远程参考更新snapshot包
  例如 mvn install -Dmaven.test.skip=true -Poracle
  其他参数可以通过mvn help 获取
1.2、maven常用命令
  1、mvn clean
  说明: 清理项目生产的临时文件,一般是模块下的target目录
DSC0009.jpg

下面来看看目录:
DSC00010.jpg

  2、mvn package
  说明: 项目打包工具,会在模块下的target目录生成jar或war等文件,如下运行结果。
DSC00011.jpg

  生成的文件 如下:
DSC00012.jpg

  3、mvn test
  说明: 测试命令,或执行src/test/java/下junit的测试用例.
DSC00013.jpg

  4、mvn install
  说明: 模块安装命令 将打包的的jar/war文件复制到你的本地仓库中,供其他模块使用 -Dmaven.test.skip=true 跳过测试(同时会跳过test compile)
DSC00014.jpg

第一个红框是它的输入路径,也是本地仓库的路径文件如下 :
DSC00015.jpg

  5、mvn deploy
  说明: 发布命令 将打包的文件发布到远程参考,提供其他人员进行下载依赖 ,一般是发布到公司的私服,这里我没配置私服,所以就不演示了。
三、POM文件讲解
  POM全称是Project Object Model,即项目对象模型。pom.xml是maven的项目描述文件,它类似与antx的project.xml文件。pom.xml文件以xml的 形式描述项目的信息,包括项目名称、版本、项目id、项目的依赖关系、编译环境、持续集成、项目团队、贡献管理、生成报表等等。总之,它包含了所有的项目 信息。
  3.2.1. pom.xml的基本配置
  [java] view plaincopy

  • <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>

  • <groupId>com.lin.learning</groupId>
  • <artifactId>maven-hellowrold</artifactId>
  • <version>0.0.1-SNAPSHOT</version>
  • <packaging>jar</packaging>

  • <name>maven-hellowrold</name>
  • <url>http://maven.apache.org</url>

  • <properties>
  • <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  • </properties>

  • </project>
  modelVersion 描述这个POM文件是遵从哪个版本的项目描述符。
  groupId 针对一个项目的普遍唯一识别符。通常用一个完全正确的包的名字来与其他项目的类似名字来进行区分(比如:org.apache.maven)。
  artifactId 在给定groupID 的group里面为artifact 指定的标识符是唯一的 , artifact 代表的是被制作或者被一个project应用的组件(产出物)。
  version 当前项目产生的artifact的版本以上4个元素缺一不可,其中groupId, artifactId, version描述依赖的项目唯一标志。
1. pom.xml文件结构
  [html] view plaincopy

  • <project>
  • <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>
  project是pom.xml的根节点,至于其它元素请参考POM Reference
2.、POM很重要的3个关系
  POM有3个很重要的关系:依赖、继承、合成。
  2.1. 依赖关系
  [html] view plaincopy

  • <dependencies>
  • <dependency>
  • <groupId>junit</groupId>
  • <artifactId>junit</artifactId>
  • <version>4.0</version>
  • <type>jar</type>
  • <scope>test</scope>
  • <optional>true</optional>
  • </dependency>
  • ...
  • </dependencies>
  如果想依赖一个maven库中没有的一个jar包,方法很简单,就是先将此jar包使用以下的命令安装到本地maven库中:
  mvn install:install-file -Dfile=my.jar -DgroupId=mygroup -DartifactId=myartifactId -Dversion=1
  再把依赖关系加进去即可。
  2.2. 继承关系
  另一个强大的变化, maven带来的是项目继承。
  2.2.1. 定义父项目
  [html] view plaincopy

  • <project>
  • <modelVersion>4.0.0</modelVersion>
  • <groupId>com.mygroup </groupId>
  • <artifactId>my-parent</artifactId>
  • <version>2.0</version>
  • <packaging>pom</packaging>
  • </project>
  packaging 类型,定义值为 pom用于定义为parent和合成多个项目。 当然我们创建的maven项目的pom都继承maven的super pom, 如果想看项目(父或子)的完全的pom结构,可以运行:
  mvn help:effective-pom
3、maven-eclipse-plugin插件
  1、mvn eclipse:eclipse
  说明: 生成eclipse配置文件,导入到eclipse开放,如果是使用m2eclipse插件,则可以不用次命令.直接使用插件导入到eclipse进行开放
  注:通过次命令生产的项目,需要在eclipse中配置M2_HOME的命令,指向你的本地仓库文件夹.
DSC00016.jpg

  来看看生成的结果:。classpath就是字节码
DSC00017.jpg

  2、mvn eclipse:m2eclipse
  生成eclipse配置文件,该配置文件需依赖eclipse 中有m2eclipse
  -DdownloadSources=true 下载依赖包的源码文件
  -Declipse.addVersionToProjectName=true 添加版本信息到项目名称中
  3、mvn eclipse:clean
  清除eclipse的项目文件
DSC00018.jpg

  看看文件内容,没有project文件 了
DSC00019.jpg

4、maven-jetty-plugin插件
  1、mvn jetty:run
  说明: 可以直接用jetty的服务器运行 注:此命令只适用于war的模块,即web模块.
  2、mvn archetype:generate
  说明: 模块创建命令, 执行命令后,会提示选择创建项目的模版,这里选18(maven-archetype-quickstart)
  后面会提示你输入groupId(包存放的路径):
  eg:com.lin
  提示输入artifactId(模块名称):
  eg:test-core
  提示输入version(版本):
  1.0.0-SNAPSHOT
  提示输入package(指项目中基本的包路径):
  eg:com.lin
  提示确认,回车即可
5、maven-release-plugin插件
  说明: 发行版本,可与scm工具集成,来提供版本管理.不等同与版本控制.允许是必须有goal.两个常用的goal如下:

  1、mvn>  清理release操作是遗留下来的文件
DSC00020.jpg


  2、mvn>  说明: 创建分支,会在分支下创建执行的分支路径
  -DbranchName=xxxx-100317 分支中的名称
  -DupdateBranchVersions=false 是否更新分支的版本信息,默认为false
  -DupdateWorkingCopyVersions=false 是否更新主干的版本信息,默认为true

  3、mvn>  创建标记,会有交互过程,提示tag中pom的版本及trunk下的新版本号,每个模块都会询问,默认是最小版本号+1
  -Dtag = 4.4.0 将在tags创建该名称文件夹
  -DdryRun=true 检查各项设置是否正确,可做测试用,会产生一些修改的配置文件信息.
  命令:

  mvn>  次命令会自动帮我们签出刚才打的tag,然后打包,分发到远程Maven仓库中
6、Maven站点报表
  1、mvn project-info-reports:dependencies
  生成项目依赖的报表
  2、mvn dependency:resolve
  查看依赖
DSC00021.jpg

  查看项目依赖情况
  3、mvn dependency:tree
  打印出项目的整个依赖树
DSC00022.jpg

  4、mvn dependency:analyze
  帮助你分析依赖关系, 用来取出无用, 重复依赖的好帮手

  5、mvn install -X
  追踪依赖的完整轨迹
DSC00023.jpg

  6、生命周期
  resource->compile->process-classes->process-test-resources->test-compile->test->prepare-package->package
  resources:resources 绑定在resource处理阶段, 用来将src/main/resources下或者任何指定其他目录下的文件copy到输出目录中
  resources:testResources 将test下的resources目录或者任何指定其他目录copy到test输出目录下
  compiler:testCompile 将测试类编译(包括copy资源文件)
  surefire:test 运行测试用例
  jar:jar 打jar包
二、各种范围
  compile(编译范围)
  compile是默认的范围;如果没有提供一个范围,那该依赖的范围就是编译范围。编译范围依赖在所有的classpath中可用,同时它们也会被打包。
  provided(已提供范围)
  provided依赖只有在当JDK或者一个容器已提供该依赖之后才使用。例如,如果你开发了一个web应用,你可能在编译classpath中需要可用的Servlet API来编译一个servlet,但是你不会想要在打包好的WAR中包含这个Servlet API;这个Servlet API JAR由你的应用服务器或者servlet容器提供。已提供范围的依赖在编译classpath(不是运行时)可用。它们不是传递性的,也不会被打包。
  runtime(运行时范围)
  runtime依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如,你可能在编译的时候只需要JDBC API JAR,而只有在运行的时候才需要JDBC驱动实现。
  test(测试范围)
  test范围依赖 在一般的 编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用。
  system(系统范围)
  system范围依赖与provided类似,但是你必须显式的提供一个对于本地系统中JAR文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。这样的构件应该是一直可用的,Maven也不会在仓库中去寻找它。。如果你将一个依赖范围设置成系统范围,你必须同时提供一个systemPath元素。注意该范围是不推荐使用的(你应该一直尽量去从公共或定制的Maven仓库中引用依赖)。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-427446-1-1.html 上篇帖子: Django 部署(Apache下) 下篇帖子: unkow jdbc driver : http://maven.apache.org
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表