Maven 阶段性总结

Maven部分

maven入门

​ maven在一般场景类似于Linux系统中的rpm、yum、apt、dpkg,这样的包管理器,但是在java中也可以对项目进行管理,进行依赖关系的管理,maven托管与Apache基金会,所以我们可以在Apache官网上下载maven,下载不必阐述,配置环境变量也很轻松,和java类似,主要是配置本地依赖和maven仓库是配置部分的重点,当配置完maven后,可以在cmd中进行测试,输入mvn -version,如果显示信息,就是配置成功了。

配置

​ Maven配置文件的路径在maven根目录中的[conf/settings.xml],找到mirror标签,其中可以设置maven远程仓库的路径,建议使用身边(国内的中央仓库,因为稳定和快)这里提供一个阿里云的镜像仓库

<!--这个标签复制到mirros标签中间-->
<mirror>
    <id>nexus-aliyun</id>
    <mirrorOf>central</mirrorOf>
    <name>Nexus aliyun</name>
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>

​ 设置本地仓库,找到local字样的标签,<localRespitory>,标签内写本地仓库的绝对路径。保存即可,例如:

<!--注意:修改自己的本地仓库路径-->
<localRepository>D:\mvn\repository</localRepository>

仓库类型:

  1. 本地仓库:每当你添加一个依赖,或者说是安装一个依赖,就会下载到本地仓库中,以后再使用的话,就可以从本地获取了。
  2. 私服仓库:这个是个人服务器,也可以是公司服务器,公司内部的提交可以通过私服让程序猿们使用
  3. 中央仓库:可以说有一个组织管理了大量的依赖,构建了一个仓库,里面能找到你需要的大部分依赖

添加依赖

找到IDE中的pom.xml,其中自行写入dependencies标签,里面可以写需要的jar包坐标。格式如下

<dependencies>
    <dependency>
        <groupId>组织名</groupId>
        <artifactId>具体的包</artifactId>
        <version>版本</version>
        <scope>作用范围</scope>
    </dependency>
</dependencies>

scope中的参数:

  • provided 这个就是项目运行时候可以用,发布之后就失效了【测试时候也有效】,但是不会传递依赖
  • test 仅仅在测试时候有效,经常见到的就是JUnit依赖了
  • compile 整个过程中都有效
  • runtime 运行时和测试时有效,没怎么见过,在运行、测试时有效,但是在编译代码时无效。
  • system 编译测试时有效,运行时无效,没见过,应该和编译过程有关叭。

依赖管理器

通过依赖管理器,管理子工程的依赖,主要是管理子工程依赖的版本,子工程中仍然要写依赖,但是不需要写版本信息了。依赖管理器的标是dependencyManagement,父工程例如:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.49</version>
        </dependency>
    </dependencies>
</dependencyManagement>

子工程的依赖配置:

<dependencies>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <!--这里不需要写版本,写的话就是写的那个版本-->
    </dependency>
</dependencies>

添加插件

maven插件可以实现很多功能,例如tomcat插件,利用maven插件可以运行web应用,pom文件配置如下所示。

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <!--访问的项目地址-->
        <path>/</path>
        <!--访问的端口号-->
        <port>8080</port>
    </configuration>
</plugin>

packaging标签

​ packaging标签表示的时打包方式,也就是当前项目属于那种类型的项目,当你看到属性值也就理解了这个标签的含义了。

  1. pom 也就是这个最终生成的时依赖文件,一般工程当作父工程时候这么写。
  2. war 打包成web应用
  3. jar 最终生成的时jar包

maven传递依赖

​ 如果一个项目依赖另一个项目,会把provided和test以外的依赖间接的依赖过来,就像文件上传的jar需要依赖IO相关的jar文件一样。

​ 如果子工程不想依赖,可以通过exclusions标签解除依赖关系,例如:

<exclusions>
     <exclusion>
         <groupId></groupId>
         <artifactId></artifactId>
         <version></version>
     </exclusion>
 </exclusions>

​ 如果有相同依赖,但是版本不同,会选择路径较短的那个,如果一样长,那就默认是最后依赖的那个。

maven命令

clean :清除target目录,有时候maven抽风,编译后出现稀奇古怪的问题,clean可能就好了

install : 把当前项目安装到本地仓库

compile : 编译当前项目

test : 走test中的所有合法的测试方法

package :将项目工程打包

依赖版本统一管理

​ 例如后面的spring框架,需要把所有模块进行版本统一,一个一个写或者是改,就很麻烦了,所以可以使用properties标签

<properties>
    <spring.version>5.3.4</spring.version>
</properties>

然后再version里可以使用el表达式进行上面定义的填充,例如:

<version>${spring.version}</version>

父-子工程

​ 通过IDEA可以方便的创建父子工程,但是父工程的packaging需要以pom形式打包,然后执行install,放到本地仓库中,然后创建一个maven工程,pom中会自动生成父工程的指向配置。如下所示

<parent>
    <!--设置父工程的坐标-->
    <groupId>父工程组织名</groupId>
    <artifactId>父工程包名</artifactId>
    <version>父工程版本</version>
    <!--相对路径:父工程的pom.xml-->
    <relativePath>父工程的pom文件,这样能解决爆红问题,实际上应该没什么作用。</relativePath>
</parent>

maven聚合工程

​ maven聚合就是一个maven工程中,通过父子工程实现一个大型工程,子项目是父工程的模块,父工程用pom形式打包,在当前的工程中创建module,属于包含的关系,通常使用依赖管理器进行管理依赖。例如我做一个商城系统,这个商城系统就是一个父工程,子工程是登录模块,订单模块,商品模块,管理模块等等。。。

异常

web项目运行时报错500-- * * * * is not a servlet

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope> <!--这个地方是不是provided,因为项目中已经包含了servletapi,这个只是在编译过程中用到了,运行时环境存在,所以冲突了。-->
</dependency>

编译过程中编译失败,版本相关问题,internal java compiler error,或者是需要1.8

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.6.2</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

评论 0

还没有评论,来说点什么吧。

提交后需要审核才会公开。