MAVEN02_依赖范围+依赖冲突+解决冲突+继承聚合(一)

简介: ①. Maven的依赖范围②. Maven的常用设置①. 全局变量②. Maven系统采用的变量③. 指定资源位置④. Maven默认属性

①. Maven的依赖范围


  • ①. maven的依赖范围包括:compile、provide、runtime、test、system


compile:编译范围的依赖会用在编译,测试,运行,由于运行时需要,所以编译范围的依赖会被打包(会被打包)


test:test范围依赖在编译和运行时都不需要,只在测试编译和测试运行时需要。例如:Junit。由于运行时不需要,所以test范围依赖不会被打包(不会打包)


provide:provide依赖只有当jdk或者一个容器已提供该依赖之后才使用。provide依赖在编译和测试时需要,在运行时不需要。例如:servletapi被Tomcat容器提供了(不会打包)


runtime:runtime依赖在运行和测试系统时需要,但在编译时不需要。例如:jdbc的驱动包。

由于运行时需要,所以runtime范围的依赖会被打包(会打包)


system:system范围依赖与provide类似,但是必须显示的提供一个对于本地系统中jar文件的路径。一般不推荐使用


②. 图解


微信图片_20220107113423.png


③. 代码中展示:


    <!--导入mysql驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
      <!--runtime表示编译器不使用它,运行期使用它-->
      <scope>runtime</scope>
            <version>8.0.17</version>
        </dependency>
        <!--导入servlet相关依赖,request不报错-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
      <!--provided的意思是编译时使用它,运行时不使用-->
            <scope>provided</scope>
        </dependency>
    <--jsp--> 
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.0</version>
      <scope>provided</scope>
    </dependency>
    <!--system 编译测试有用、不会运行打成jar-->
    <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <scope>system</scope>
            <optional>true</optional>
            <version>${java.version}</version>
            <systemPath>${java.home}/../lib/tools.jar</systemPath>
        </dependency>


②. Maven的常用设置


①. 全局变量


  • ①. 在Maven的pom.xml文件中,properties用于定义全局变量,POM中通过${property_name}的形式引用变量的值。定义全局变量:


  <properties>
    <spring.version>4.3.10.RELEASE</spring.version>
  </properties>


②. 引用全局变量:


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


②. Maven系统采用的变量


<properties>
  <!--源码编译jdk版本-->    
  <maven.compiler.source>1.8</maven.compiler.source>
  <!--运行代码的jdk版本-->
  <maven.compiler.target>1.8</maven.compiler.target>
  <!--项目构建使用的编码,避免中文乱码-->
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  <!--生成报告的编码-->
  <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>


③. 指定资源位置


①. src/main/java和src/test/java这两个目录中的所有*.java文件会分别在comile和test-comiple阶段被编译,编译结果分别放到了target/classes和targe/test-classes目录中,但是这两个目录中的其他文件都会被忽略掉,如果需要把src目录下的文件包放到target/classes目录,作为输出的jar一部分。需要指定资源文件位置。以下内容放到buid标签中


②. IDEA中图解(默认情况下)

在classes中没有A.txt文件出现


微信图片_20220107113548.png


③. 需求一:想要A.txt出现在classes中

在pom.xml添加如下内容,然后重新打包即可


  <build>
       <resources>
           <resource>
               <!--所在的目录-->
               <directory>src/main/java</directory>
               <includes>
                   <!--包括目录下的.properties,.xml 文件都会扫描到-->
                   <include>**/*.properties</include>
                   <include>**/*.xml</include>
                   <include>**/*.txt</include>
               </includes>
               <!--filtering 选项 false 不启用过滤器, *.property 已经起到过滤的作用了 -->
               <filtering>false</filtering>
           </resource>
       </resources>
   </build>


微信图片_20220107113612.png


④. 需求二:


在xml中配置如下配置:

微信图片_20220107113630.png


    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.MF</include>
                    <include>**/*.XML</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <!--资源文件的路径,默认位于${basedir}/src/main/resources/目录下-->
                <directory>src/main/resources</directory>
                <!--一组文件名的匹配模式,被匹配的资源文件将被构建过程处理-->
                <includes>
                    <include>**/*</include>
                    <include>*</include>
                </includes>
                <!--filtering默认false,true表示通过参数对资源文件中的${key}
                在编译时进行动态变更。替换源可紧-Dkey和pom中的<properties>值
                或<filters>中指定的properties文件-->
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>


④. Maven默认属性


  ${basedir} 项目根目录  
  ${version}表示项目版本;  
  ${project.basedir}同${basedir};  
  ${project.version}表示项目版本,与${version}相同;  
  ${project.build.directory} 构建目录,缺省为target  
  ${project.build.sourceEncoding}表示主源码的编码格式;  
  ${project.build.sourceDirectory}表示主源码路径;  
  ${project.build.finalName}表示输出文件名称;  
  ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes 


    输出结果为:
  test=${pro.name}
  # F:\\mavenTest\\A 项目根目录
  basedir=${basedir}
  basedir2=${project.basedir}
  # version=1.0-SNAPSHOT
  version=${version}
  # project.build.directory=F:\\mavenTest\\A\\target 构建目录,缺省为target
  project.build.directory=${project.build.directory}
  # project.build.sourceDirectory=F:\\mavenTest\\A\\src\\main\\java
  # 表示主源码的编码格式
  project.build.sourceDirectory=${project.build.sourceDirectory}
  # project.build.finalName=A-1.0-SNAPSHOT 表示输出文件名称
  project.build.finalName=${project.build.finalName}
  # project.build.outputDirectory=F:\\mavenTest\\A\\target\\classes
  # 构建过程输出目录,缺省为target/classes
  project.build.outputDirectory=${project.build.outputDirectory}
相关文章
|
4月前
|
Java Maven 容器
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
java依赖冲突解决问题之Maven在编译打包过程中对依赖的jar包如何解决
|
1月前
|
Java Maven
maven打瘦包,且只打入部分想打入的依赖瘦包
maven打瘦包,且只打入部分想打入的依赖瘦包 设计 工程结构分析 环境管理 城市资源 安全工程 工程管理
53 10
|
2月前
|
Java API Apache
除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
143 2
|
2月前
|
XML 安全 Java
【Maven】依赖管理,Maven仓库,Maven核心功能
【Maven】依赖管理,Maven仓库,Maven核心功能
645 3
|
2月前
|
Java Maven
Maven 依赖管理
Maven 一个核心的特性就是依赖管理。当我们处理多模块的项目(包含成百上千个模块或者子项目),模块间的依赖关系就变得非常复杂,管理也变得很困难。针对此种情形,Maven 提供了一种高度控制的方法。
101 5
|
3月前
|
Java Maven
Maven 引入外部依赖
如果我们需要引入第三方库文件到项目,该怎么操作呢?
45 5
|
4月前
|
安全 Java Maven
优化Maven镜像配置:使用阿里云加速依赖下载
更新Maven镜像配置至关重要,尤其使用阿里云仓库时。在`settings.xml`中加入特定镜像配置可显著提升依赖下载速度。示例配置指定了阿里云镜像ID、替代表态仓库、安全的URL、默认布局及启用版本管理。需定位至用户目录下的`.m2/`文件夹编辑`settings.xml`,添加镜像信息后保存测试。若下载仍慢,考虑网络状况或备选镜像。多镜像设置时需注意避免冲突。
705 3
|
4月前
|
Java 测试技术 Maven
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
单元测试问题之在Maven项目中引入JUnit 5和Mockito的依赖如何解决
241 1
|
4月前
|
Java Maven
intellij idea如何查看项目maven依赖关系图
这篇文章介绍了如何在IntelliJ IDEA中查看项目的Maven依赖关系图,包括使用Maven工具栏和相关操作来展示和查看依赖细节。
|
4月前
|
Java Maven 开发者
"揭秘IDEA的神奇助手:Maven Helper插件,让你轻松驾驭复杂依赖,告别冲突噩梦!"
【8月更文挑战第20天】Maven Helper是一款提升Java开发者工作效率的IDEA插件,它能直观展示项目依赖关系并协助管理。主要功能包括依赖树视图、冲突检测与解决及依赖排除。安装简便,重启IDEA后即用。借助其“Dependencies”面板,开发者可以清晰了解依赖详情,快速定位并解决冲突问题,有效优化项目结构,提升开发效率。
277 0