Live2D
复制代码

03-maven中的依赖作用范围和常用属性

1、maven的依赖范围

依赖的范围,使用scope表示
在我们添加依赖jar包的代码到pom文件的依赖属性中时,
通常会在依赖坐标之下添加一个<scope></scope>,
该标签中填写的关键词表示这个依赖作用的范围。
--scope中可填写的值有:
	compile、test、provide三个
	
--依赖添加scope,表示有使用范围,什么是使用范围?
	就是表示这个依赖在maven构建项目的哪个阶段起作用
	
--maven构建项目包括:清理、编译、测试、打包、安装、部署这几个过程阶段
如下单元测试junit依赖写法:
<dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>4.11</version>
   <scope>test</scope>
</dependency>
--依赖范围是test:表示在项目构建过程中只在测试阶段使用该jar
什么意思呢?
	就是说我们在pom文件中的依赖有这样包含test范围的,在项目构建的编译主程序时是没有这个依赖的,
	但是在编译测试程序或者测试阶段,这个依赖才参与进来。
	非常明显的就是我们在主程序中写好方法后,写个主方法,然后调用junit中Assert类中的比较方法
	Assert.assertEquals(30,res);
	就会发现需要导包,但是junit还得自己添加。
	而在测试程序使用上面方法只需要导入相应的junit的Assert类就可以了,不需要导junit的jar包
	
--当依赖范围为compile时:表示编译、测试、打包、安装、部署这些过程都可以使用这个jar包

--默认不写范围scope时就是compile

--当依赖范围为provide时:
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>
--表示在项目构建到打包和安装阶段该jar包不起作用,上面的servlet的jar包,
我们打包web项目为war文件,部署到Tomcat服务器中,而Tomcat的lib目录是有servlet规范的jar包的,
启动服务器,我们的web项目运行所需要的servlet依赖用的是服务器中的,
所以打包时就没必要将servlet的jar包封装到war文件中,所以需要provide,表示以后会有提供者。
如果是compile的话,打包后的文件中WEB-INF目录下lib就是这些依赖的jar包存放位置

2、maven常用属性

Maven的常用属性设置

2.1 全局变量设置

在Maven的pom.xml文件中,<properties>标签用来定义全局变量

--如maven的属性设置,如下:
其中<project.build.sourceEncoding>表示的是属性名或者说是一个变量名,UTF-8表示该属性的值
  <properties>
    <!--设置Maven构建项目时用的编码方式,设为utf-8避免中文乱码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--设置Maven编译代码时用的JDK版本-->
    <maven.compiler.source>1.7</maven.compiler.source>
    <!--设置Maven运行程序时用的JDK版本-->
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>
--Maven全局变量设置
	1、自定义属性
	在<properties>标签中通过自定义标签声明变量(标签名就是变量名),然后把值赋上去
	2、使用
	在pom文件中的其他位置,如依赖中使用"${自定义标签名}"来表式变量值

--这样做的优点和作用如下展示:
有时候我们需要用到一个框架,例如spring框架,这个框架有许多的项目,
我们的项目只需要spring框架中的一部分项目,所以我们需要在依赖中添加spring框架各个项目的坐标依赖,
我们要保证这些项目的版本一致,那么坐标中的version属性都是一样的,
所以我们自定义一个属性名为<spring.version>的变量,赋上值,
然后在spring各项目的依赖的坐标的version属性中用${spring.version}代替就行了,
到时候需要修改使用版本的时候在properties中修改对应属性值就可以了,非常省事。
--所以自定义全局变量一般是定义依赖的版本号
 <properties>
    <!--设置Maven构建项目时用的编码方式,设为utf-8避免中文乱码-->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <!--设置Maven编译代码时用的JDK版本-->
    <maven.compiler.source>1.7</maven.compiler.source>
    <!--设置Maven运行程序时用的JDK版本-->
    <maven.compiler.target>1.7</maven.compiler.target>
    <!--自定义属性,spring框架版本-->
    <spring.version>5.2.5</spring.version>
  </properties>

<dependencies>
    <dependency>
        <groupId>org.springframwork</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframwork</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframwork</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>

2.2 指定资源位置插件设置

 <build>
    <resources>
      <resource>
        <!--表示编译时在src/main/java目录下的-->
        <directory>src/main/java</directory>
        <!--所有.properties、.xml类型的文件可以被扫描到-->
        <includes>
          <include>**/*.properties</include>
          <include>**/*.xml</include>
        </includes>
        <!--filtering的值false表示不启用过滤器,上面include已经是过滤操作了-->
        <filtering>false</filtering>
      </resource>
    </resources>
  </build>
如上面build属性所示:

1、在上面没有设置resources属性时,maven执行编译时,
默认只把resources中的所有文件拷贝到生成的target目录下的classes目录中,
而如果src/main/java/com/studymyself目录中除了有java文件外还有一个a.propertis文件,
maven是不予理睬的。

2、如果有了上面的设置,Maven进行编译时就会把要求的文件类型扫描到,并且拷贝到对应目录下,
1中就会将a.properties文件拷贝到target/classes/com/studymyself目录下,并不是拷贝到classes下。
--这样做是因为有时候开发,有些文件不一定会放在resources目录中,而是放到java目录中的一些程序包下。
这就需要配置resources属性。
posted @ 2021-08-08 18:50  Milen-jie  阅读(322)  评论(0编辑  收藏  举报