Maven环境搭建以及使用要点

Maven环境搭建以及使用要点

Maven环境搭建以及使用要点
一、安装maven
二、配置maven
三、从头开始使用maven进行项目构建
四、eclipse集成maven
五、项目示例

一、安装maven

首先,确保jdk已正确安装[windows下使用echo %JAVA_HOME%命令可以快速查看jdk路径];
然后,下载maven包,解压到不含中文路径文件下,解压后,将bin路径加入到path环境变量中;
最后,验证是否安装成功,打开命令窗口,输入命令mvn -v,出现如下信息:
这里写图片描述
安转成功!

二、配置

maven的配置文件有两个通用的配置路径,但是有效范围不同:

  • Maven的全局配置 : ${maven.home}/conf/settings.xml;
  • 针对用户的配置 : ${user.home}/.m2/settings.xml

前面的路径作为全局配置,后面的作为该用户特定的配置。
接下来介绍配置文件的细节:

1、简单配置

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                        https://maven.apache.org/xsd/settings-1.0.0.xsd">
     <localRepository>${user.home}/.m2/repository</localRepository>
     <interactiveMode>true</interactiveMode>
     <usePluginRegistry>false</usePluginRegistry>
     <offline>false</offline>
     ...
   </settings>
  • localRepository:表明本地仓库位置,默认路径是${user.home}/.m2/repository,但是默认路径会根据不同的登录用户而有所差别。
  • interactiveMode:默认true,maven是否允许与用户交互输入。【不明】
  • usePluginRegistry:默认为false,maven是否使用${user.home}/.m2/plugin-registry.xml管理plugin版本。
  • offline:默认为false,是否使用离线模式,出于安全考虑或者不能连接到远程仓库。

2、plugin Groups

该节点维护一个pluginGroup列表,自动包含:org.apache.maven.plugins和org.codehaus.mojo,包含一系列的pluginGroup,每一个包含一个groupId。在用命令行操作时,当一个插件被使用到时会从该列表中搜索,从而简化命令行操作,如:

   <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                         https://maven.apache.org/xsd/settings-1.0.0.xsd">
     ...
     <pluginGroups>
       <pluginGroup>org.mortbay.jetty</pluginGroup>
     </pluginGroups>
     ...
   </settings>

当需要执行org.mortbay.jetty:jetty-maven-plugin:run时,可以使用一下简化命令:mvn jetty:run。

3、servers

仓库的下载和部署是在pom中通过repositories和distributionManagement来定义的,然而,必要的配置,如账号、密码不应该在具体的pom.xml中每次都单独配置,这种配置需要存在于构建服务器的配置文件中,即settings.xml中。

   <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                         https://maven.apache.org/xsd/settings-1.0.0.xsd">
     ...
     <servers>
       <server>
          <id>server001</id>
          <username>my_login</username>
         <password>my_password</password>
         <privateKey>${user.home}/.ssh/id_dsa</privateKey>
         <passphrase>some_passphrase</passphrase>
         <filePermissions>664</filePermissions>
         <directoryPermissions>775</directoryPermissions>
         <configuration></configuration>
       </server>
     </servers>
     ...
   </settings>
  • 上面配置包含了两种配置形式,一种是账号密码(由username和password组合使用),另一种是秘钥通行证方式(由privateKey和passphrase组合使用)。
  • id:这是试图连接到的仓库\镜像的相匹配的服务器的id(不是用户登录的)。【不明】
  • filePermissions:文件限制数(一般不用配置)
  • directoryPermissions:目录限制数(一般不用配置)

4、mirrors

远程仓库的配置

   <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                         https://maven.apache.org/xsd/settings-1.0.0.xsd">
     ...
     <mirrors>
       <mirror>
         <id>planetmirror.com</id>
         <name>PlanetMirror Australia</name>
        <url>http://downloads.planetmirror.com/pub/maven2</url>
        <mirrorOf>central</mirrorOf>
      </mirror>
    </mirrors>
     ...
   </settings>
  • id,name:mirror的用户体验友好的唯一标识,id是用来区分不同mirror的,并且在连接到mirror时,从servers中挑出相配的证书。
  • url:mirror的基本url,构建系统将优先使用该url去连接仓库而不是原始的url。【不明】
  • mirrorOf:mirror的仓库的id,例如,指向mirror的maven中央库,那么设置为“central”,更高级的配置如repo1、repo2或者*,!inhouse。它不能与id一致。【不明】

5、Profiles

   <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
                         https://maven.apache.org/xsd/settings-1.0.0.xsd">
     ...
   <profiles>
     <profile>
       <id>f1nexus</id>
       <repositories>
           <repository>
              <id>nexus</id>
              <name>f1nexuspublic</name>
              <url>私服仓库地址</url>
              <releases>
                 <enabled>true</enabled>
              </releases>
              <snapshots>
                 <enabled>true</enabled>
              </snapshots>
          </repository>
      </repositories>
     </profile>
   </profiles>
     ...
   </settings>

该settings.xml中profile节点是pom中profile节点的删节版本,因为是作为一个通用配置,它有且仅包含了activation, repositories, pluginRepositories 和 properties节点,如果settings文件中一个profile是激活的,他的值将覆盖pom中的profiles中的值。

三、从头开始使用maven进行项目构建

一、maven项目的搭建可以有两种方式:

  • mvn命令(使用maven提供的模板进行项目初始化):mvn -B archetype:generate
    -DarchetypeGroupId=org.apache.maven.archetypes
    -DgroupId=com.f1.app
    -DartifactId=f1-app
  • ide工具创建:
    使用eclipse或idea。
    文章最后将介绍ied的方式操作maven,进行项目的构建。

二、项目构建过程

运行完后第一步中的mvn命令后,打开目录:
这里写图片描述
这是一个典型的maven项目的目录结构,应用的源码在${basedir}/src/main/java,测试的源码在${basedir}/src/test/java,并且可以看到我们一直说的pom.xml文件。
pom.xml:

   <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.f1.app</groupId>
     <artifactId>f1-app</artifactId>
     <packaging>jar</packaging>
     <version>1.0-SNAPSHOT</version>
     <name>Maven Quick Start Archetype</name>
     <url>http://maven.apache.org</url>
     <dependencies>
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
         <version>3.8.1</version>
         <scope>test</scope>
       </dependency>
     </dependencies>
   </project>
接下来开始你的项目构建之旅!
  • 我该如何编译我的项目?
    mvn compile
    执行完之后,项目路径下${basedir}/target/classes,找到后,会发现我们的项目已经被编译。
  • 我该如何编译测试类并且运行单元测试?
    mvn test
    该命令会编译并运行单元测试,展示结果。
    如果仅仅是编译但不执行,使用如下命令:
    mvn test-compile
  • 我该怎样将项目打包成jar,安装到本地仓库?
    首先 :mvn package
    查看${basedir}/target目录,我们的项目已经打包完毕。
    然后 :mvn install
    查看本地仓库,可以发现路径中已经存在我们的项目jar包,so easy!就安装到了本地仓库。
    打包过程中常用命令还有:
    mvn clean:此命令会清除target目录下的文件。
    mvn idea:idea:生成 IntelliJ IDEA的描述文件
    mvn eclipse:eclipse:生成eclipse的描述文件
  • 什么是snapshot和realease?
    snapshot相当于非正式版本,并不是稳定的、无错的;是我们平时开发过程中用的最多的版本命名方式;而release版本是发布的正式版本。
    注意,当把版本号中带有snapshot的版本部署到realease版本库中时会提醒不能部署!
  • 我该如何使用plugin?

    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.3</version>
          <configuration>
            <source>1.5</source>
            <target>1.5</target>
          </configuration>
        </plugin>
      </plugins>
    </build>

    你会注意到maven中的plugin看起来像是依赖,尽管某种意义上确实是。
    plugin将会按照你配置的版本号进行自动下载和使用(如果不是指定将默认使用最新版本)。
    configuration 节点应用给定的参数到每个编译的目标,在上述情况下,编译器插件总是构建过程的一部分,这只是改变了这个配置。它也能添加新的目标、配置特殊的目标到构建过程中

  • 我该怎样把我的资源文件打包时添加到jar包中?
    以下是标准的文件构成,也是maven默认的目录结构:
    这里写图片描述
    这个架构下的文件均会在打包过程中自动打入进jar包。

  • 我该如何过滤资源文件?
    有些情况一个资源文件需要一个只能在构建过程中才能确定的值。为了达到这个目标,maven允许使用${propertyname}进行引用,这个属性可以是pom中定义的值、用户的settings文件、一个额外的属性文件的定义的属性或者是一个系统变量。
    为了在设置值时能找到其他的资源为自己使用,需要在中设置为true。这样该资源文件就可以使用其他资源文件的属性了。
    如下:
    我的资源文件:resoures/application.properties:
    application.name=\${project.name}
    application.version=\${project.version}
    message=\${my.filter.value}
    messages=\${gxx.filter.value}

    pom.xml:

    <!-- 将该路径文件加入到可提供值的源中(若其他文件加入到了filter中:true) -->
          <filters>
            <filter>src/main/filters/filters.properties</filter>
          </filters>
          <resources>
            <resource>
                <directory>src/main/resources</directory>
                <!-- 设置为true{最高级开关}才能在配置文件中读取filter中属性 
                能屏蔽 -Dgxx.filter.value=hhhhhh 方式赋值-->
                <filtering>true</filtering>
            </resource>
          </resources>
        </build>
        <!-- 能够被本文件和其他文件获取到(若其他文件加入到了filter中:true) -->
        <properties>
            <gxx.filter.value>f13.0</gxx.filter.value>
        </properties>

    同样,使用命令:mvn process-resources “-Dgxx.filter.value=hello again”处理资源命令也可以为application.properties设置值

  • 我该如何为项目添加依赖?

    <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">
      <groupId>com.f1.app</groupId>
      <artifactId>my-other-app</artifactId>
      ...
      <dependencies>
        ...
        <dependency>
          <groupId>com.f1.app</groupId>
          <artifactId>f1-app</artifactId>
          <version>1.0-SNAPSHOT</version>
          <scope>compile</scope>
        </dependency>
      </dependencies>
    </project>

    依赖中其他节点含义已经介绍过,来专门介绍下,它代表你的依赖将被用作何种方式使用,可配置项有以下几个:默认是compile,还有test、runtime等。compile就是编译时需要依赖进去,而test就是单元测试过程中依赖。

  • 我该如何部署我的jar包到我配置好的远程仓库?
    项目pom.xml中配置格式如下:

    <distributionManagement>
      <repository>
        <id>f1-repository</id>
        <name>f1Repository</name>
        <url>仓库地址</url>
      </repository>
    </distributionManagement>

    依此,我们的项目pom.xml如下配置:

    <distributionManagement>
       <repository>
          <id>f1-nexus-releases</id>
          <name>f1-nexus-releases</name>
          <url>http://psdpt.joinbright.com:8081/repository/maven-releases/</url>
       </repository>
       <snapshotRepository>
          <id>f1-nexus-snapshots</id>
          <name>f1-nexus-snapshots</name>
          <url>http://psdpt.joinbright.com:8081/repository/maven-snapshots/</url>
       </snapshotRepository>
    </distributionManagement>

    上面分别配置了snapshot版本库和release版本库。
    执行:
    mvn deploy
    即可将我们的项目jar包部署到远程仓库。

  • 接下来,我该如何一次性将多个有关联的项目进行打包呢?
    场景:我的f1-app,依赖于另一个项目web-app,打包时,需要将该依赖加进来。
    那么,看一下该场景典型的目录结构:
    这里写图片描述
    该顶层pom.xml文件内容如下:

    <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.f1.app</groupId>
      <artifactId>app</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>pom</packaging>
    
      <modules>
        <module>f1-app</module>
        <module>f1-webapp</module>
      </modules>
    </project>

    然后,在webapp中加入依赖:

    <dependencies>
      <dependency>
        <groupId>com.f1.app</groupId>
        <artifactId>f1-app</artifactId>
        <version>1.0-SNAPSHOT</version>
      </dependency>
    </dependencies>

    最后,在两个项目的pom.xml中加入,作为顶层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">
       <parent>
         <groupId>com.f1.app</groupId>
         <artifactId>app</artifactId>
         <version>1.0-SNAPSHOT</version>
       </parent>

    在顶层pom.xml所在目录执行命令:mvn clean install
    一切Ok!
    那么,解释一下都发生了什么:
    首先,主pom文件建立,打包方式(packaging)设置为pom,并且定义了一个module清单。这些设置,告诉maven来运行所有设置的操作,而非当前的这一个项目(当然,你也可以设置该模式,在执行命令时,加入参数–non-recursive来顶替这个行为)。
    然后,我们通知将要打的包:webapp,它还需要依赖另一个项目:f1-app。这将保证在打webapp包之前能够将f1-app的jar包打好,并且在webapp的library会有f1-app。
    另外,说一点,如果依赖时,将设置为test(非默认或者非compile),打好的包中将不会包含该依赖。
    最后一步,就是需要加入的定义,这与有所区别,因为它(parent)确保了pom总是能够被找到,即使这个项目是通过分布式独立于parent的。
    上面这几步是需要执行run来确保成功的。

四、eclipse集成maven

eclipse中配置已安装的maven:
1. window->preferences->Maven;
2. Installations中,查看是否是我们安转的maven,若不是,点击“add”,定位到maven的安装路径下,确定;
3. User Settings中,按如下方式配置:
这里写图片描述
4. 至此,可以开始在eclipse开始我们的maven项目了
new->Maven Project

这里写图片描述

这里写图片描述

五、项目示例

首先,项目中实际使用时,需要建立pom.xml进行依赖的管理,常用的配置如下:
pom.xml:

<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>
    <artifactId>f1-filesystem</artifactId>
    <name>filesystem</name>
    <packaging>jar</packaging>
    <!-- 继承关系描述 -->
    <parent>
        <artifactId>f1-parent</artifactId>
        <groupId>com.joinbright.f1</groupId>
        <version>3.0.0-SNAPSHOT</version>
    </parent>
    <!-- 依赖项 -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        ...........
    </dependencies>
</project>

当maven的settings文件配置好后,就可以进行项目的打包等操作了。到该项目路径下(存在pom.xml的路径),打开命令行窗口,执行mvn clean install,
如下:
这里写图片描述

此时,在本地仓库中,便能看见install后的jar包

这里写图片描述

关于maven更多操作,请查阅maven官网Run篇。

好了,开始我们的maven之旅吧!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值