三、maven 笔记 (非教程)

2022-03-23  本文已影响0人  那钱有着落吗

记录一些自己平时忽略或者不熟悉的知识点

1.镜像仓库

有时候访问maven默认的的仓库会比较慢或者有时候干脆就下载不到某些包,所以我们可以更换远程仓库地址为国内的镜像仓库,速度会很快。

镜像仓库怎么配,可以直接百度搜阿里云maven仓库,然后到阿里云官网去找就行了,很好找。

2.JDK的配置

在maven的目录下有一个conf目录中的setting文件是我们会经常用到的maven的配置文件,可以在里面配置我们使用的jdk的版本:

3.maven的工程类型

pom工程其实就是对于maven的jar包的管理的工程,一般是只做maven管理而不做代码逻辑开发的存在;

而下面两种工程就是到时候会直接打包然后运行的工程;

4.项目坐标

5. maven install

maven 有一个install 也就是安装的操作,其实就是把本地项目打包一下然后按照项目的坐标给放到本地仓库里。


6.maven 可以解决依赖冲突

在依赖的时候,如果有引入相同包不同版本的依赖,怎么判定最后依赖的是哪一个呢?

6.排除依赖

7.依赖范围

依赖范围就决定了你依赖的坐标 在什么情况下有效,什么情况下无效:

7.1 compile

这是默认范围。如果没有指定,就会使用该依赖范围。表示该依赖在编译和运行时都生效。

7.2 provided

已提供依赖范围。使用此依赖范围的Maven依赖。典型的例子是servlet-api,编译和测试项目的时候需要该依赖,但在运行项目的时候,由于容器已经提供,就不需要Maven重复地引入一遍(如:servlet-api)

7.3 runtime

runtime范围表明编译时不需要生效,而只在运行时生效。典型的例子是JDBC驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。

7.4 system

系统范围与provided类似,不过你必须显式指定一个本地系统路径的JAR,此类依赖应该一直有效,Maven也不会去仓库中寻找它。但是,使用system范围依赖时必须通过systemPath元素显式地指定依赖文件的路径。

7.5 test

test范围表明使用此依赖范围的依赖,只在编译测试代码和运行测试的时候需要,应用的正常运行不需要此类依赖。典型的例子就是JUnit,它只有在编译测试代码及运行测试的时候才需要。Junit的jar包就在测试阶段用就行了,你导出项目的时候没有必要把junit的东西到处去了就,所在在junit坐标下加入scope-test

7.6 Import

import范围只适用于pom文件中的<dependencyManagement>部分。表明指定的POM必须使用<dependencyManagement>部分的依赖。
注意:import只能用在dependencyManagement的scope里。

定义一个父工程--》POM工程:

注意:工程1要打成自己的jar包

定义一个子工程:

如果父工程中加入score-import 相当于强制的指定了版本号:

8.编译器插件

在上文中有在setting文件中设置JDK版本的,这是一个maven的全局性的设置,假如在实际的项目中,我们的JDK不是setting文件中设置的,这个时候就可以使用插件来设置,设置编译使用的JDK版本。

通过编译器插件,我们可以配置使用的JDK或者说编译器的版本:

【1】 settings.xml文件中配置全局编译器插件:
找到profiles节点,在里面加入profile节点:

<profile>
                <!-- 定义的编译器插件ID,全局唯一,名字随便起 -->
                <id>jdk-1.7</id>
                <!-- 插件标记,activeByDefault :true默认编译器,jdk提供编译器版本 -->
                <activation>
                        <activeByDefault>true</activeByDefault>
                        <jdk>1.7</jdk>
                </activation>
                <!-- 配置信息source-源信息,target-字节码信息,compilerVersion-编译过程版本 -->
                <properties>
                        <maven.compiler.source>1.7</maven.compiler.source>
                        <maven.compiler.target>1.7</maven.compiler.target>
                        <maven.compiler.compilerVersion>1.7</maven.compiler.compilerVersion>
                </properties>
        </profile>

【2】配置编译器插件:pom.xml配置片段

<!-- 配置maven的编译插件 --> 
<build>
    <plugins>
    <!--JDK编译插件 -->
          <plugin>
        <!--插件坐标 -->
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
         <!-- -->
        <configuration>
          <!-- 源代码使用JDK版本-->
          <source>1.7</source>
           <!-- 源代码编译为class文件的版本,要保持跟上面版本一致-->
          <target>1.7</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
  </build>

9.资源拷贝插件

Maven在打包时默认只将src/main/resources里的配置文件拷贝到项目中并做打包处理,而非resource目录下的配置文件在打包时不会添加到项目中。
我们的配置文件,一般都放在:src/main/resources

然后打包后配置文件就会在target的classes下面放着:


我现在想把非resources下面的文件也打包到classes下面:

需要配置:

pom.xml配置片段:


<build>
        <resources>
                        <resource>
                                <directory>src/main/java</directory>
                                <includes>
                                        <include>**/*.xml</include>
                                </includes>
                        </resource>
                        <resource>
                                <directory>src/main/resources</directory>
                                <includes>
                                        <include>**/*.xml</include>
                                        <include>**/*.properties</include>
                                </includes>
                        </resource>
                </resources>
        </build>

配置好以后,那么你设置的位置下的配置文件都会被打包了:

上一篇 下一篇

猜你喜欢

热点阅读