首页 > 其他分享 >Maven

Maven

时间:2024-08-07 17:28:31浏览次数:11  
标签:依赖 jar Maven pom scope org junit

1,Maven 简介

项目构件管理工具,提供了一种简洁的方式来定义项目结构、构建过程和依赖管理。

2,常用命令

1. install 安装 jar 包

mvn install:install-file -DgroupId=org.slf4j -DartifactId=slf4j-simple -Dversion=2.0.0 -Dpackaging=jar -Dfile=D:\gaox\software\slf4j-simple-2.0.0.jar

3,pom 文件

1,常用 pom 标签

1. packing

打包类型:pom,jar,war

  • pom:父类型
  • jar:内部调用或者作服务使用(默认)
  • war:打包用在服务器上部署项目

父项目必须是 pom

<packaging>pom</packaging>

2. scope

在dependency标签下有一个scope标签,该标签的作用是可以设置依赖在项目的使用阶段,通常来说,项目包含:编译、运行、测试、打包这些不同的阶段

  • compile:编译依赖范围,默认值,适用于所有阶段,编译、运行、测试、打包都会包含项目中,并且会传递依赖。

  • test:测试依赖范围,只在测试时使用,不会随项目发布,比如 junit,只有在测试代码中可以使用该依赖提供的资源。

将依赖 scope 改为 test

<!--market-common-->
<dependency>
    <groupId>org.example</groupId>
    <artifactId>market-common</artifactId>
    <scope>test</scope>
</dependency>

此时正常 src/main 下的无法找到依赖中的资源

测试可以通过

  • provided:已提供范围依赖,表示环境中(JDK 或者容器)会提供该支持,可以通过编译、测试阶段,打包均能通过,但是打包不会将该依赖打进 war 包,但是运行到该依赖的内容时,需要容器提供,否则会无法找到资源。例如servlet.jar,这个包在 tomcat 容器中 lib 目录已经提供了,因此打包时servlet.jar 无需包含在项目中,当然自己把 jar 包放进 tomcat 的 lib 目录中也是可以的(测试过)。以上针对 war 包,jar 包的时候不知道是不是将依赖打进了内置的容器,运行时依然会通过(测试过)。
<dependency>
    <groupId>org.example</groupId>
    <artifactId>myPackage</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>provided</scope>
</dependency>

在 idea 中,由于 provided 会导致运行需要环境提供,所以可能导致 ClassNotFoundException,需要设置一下。

  • runtime:运行时范围依赖,在运行的时候才会用到该依赖,适用运行和测试阶段,编译无法通过。典型的例子时 JDBC 驱动实现,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。既然运行时也要使用 scope 设为 runtime 的依赖,所以 scope 为 runtime 的依赖在项目打部署包的时候(即构建 artifact)会被一起打包,会放在 WEB-INF/lib 目录下。用的不多,不做深究。

  • system:类似 provided,需要显式提供包含依赖的 jar 的路径(使用 systemPath 标签),Maven 不会在仓库中查找它,而是根据 systemPath 提供的路径去寻找。

当 scope=system 时候依赖不会自动打包进去,需要添加参数:

这个 scope 不推荐使用,不做深究,使用的话可以参考打包方式 2.1 项目引入第三方 jar 包和本地 jar 包

  • import:这个跟上述几个不同,是和 一起用于导入 pom 配置。由于 maven 是单根继承机制,也就是只能有一个 parent 标签,而POM文件的parent标签一般都是继承spring-boot-starter-parent。当我们还想继承其他的父类或者让父类的依赖更加清晰和好管理时,可以通过 scope=import 来实现。scope=import 只能用在 dependencyManagement 里面,且仅用于 type=pom 的 dependency。它的作用就是相当于引入了某个 pom 文件,然后我们可以选择性的使用该 pom 文件下的哪个依赖

以 spring-cloud 依赖举例:

<dependencyManagement>
      <dependencies>
          <dependency>
              <groupId>org.springframework.cloud</groupId>
              <artifactId>spring-cloud-dependencies</artifactId>
              <version>Greenwich.RELEASE</version>
              <type>pom</type>
              <scope>import</scope>
          </dependency>
      </dependencies>
</dependencyManagement>

<!-- 这里引入上面 pom 文件中的某个依赖,可以不指定版本,因为在上面import的文件中已经定义了版本号 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

Scope 总结表格:

2,pom 文件示例

1) 父 pom

<!--
1,xml 版本
2,编码
-->
<?xml version="1.0" encoding="UTF-8"?>

<!-- project是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">
    
    <!-- 描述pom文件遵循从哪个版本的项目描述符  modelVersion 标签:从Maven 2 开始就固定为4.0.0 -->
    <modelVersion>4.0.0</modelVersion>
    
    <!--
      描述坐标信息
      groupId:项目组织唯一标识
      artifactId:项目唯一标识
      version:版本
    -->
    <groupId>org.example</groupId>
    <artifactId>market</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!--
     描述信息
     name:项目名称,仅是描述标识
     url:链接地址
     description: 描述信息
     -->
    <name>market</name>
    <url>http://www.baidu.com</url>
    <description>管理系统</description>
    
    <!-- 子模块信息 -->
    <modules>
        <module>market-gateway</module>
        <module>market-config</module>
    </modules>

    <!-- 打包类型 -->
    <packaging>pom</packaging>
  
    <!-- 一些自定义属性,一般用来定义依赖版本,使用 ${} 引用 -->
    <properties>
        <spring-cloud.version>Hoxton.SR9</spring-cloud.version>
        <servlet-version>3.1.0</servlet-version>
        <jackson-version>2.11.1</jackson-version>
        <webflux-version>2.3.2.RELEASE</webflux-version>
    </properties>
  
    <!-- 引入的依赖 -->
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit}</version>
        </dependency>

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>${hutool.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${springboot.version}</version>
            
            <!--依赖作用范围-->
            <scope>test</scope>
            
            <!-- 引入时需要排除的依赖 -->
            <exclusions>
                <exclusion>
                    <artifactId>junit</artifactId>
                    <groupId>junit</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>junit-jupiter-api</artifactId>
                    <groupId>org.junit.jupiter</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>
   
    <!--声明依赖但不引入,一般在父 pom 中才有-->
    <dependencyManagement>
        <dependencies>

            <dependency>
                <groupId>org.example</groupId>
                <artifactId>market-common</artifactId>
                <version>${project.version}</version>
            </dependency>

            <!-- MySql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>${mysql.version}</version>
            </dependency>

        </dependencies>
    </dependencyManagement>
</project>

2)子 pom

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <!-- 父 pom 依赖 -->
    <parent>
        <artifactId>market</artifactId>
        <groupId>org.example</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    
    <!--打包方式-->
    <packaging>war</packaging>
    <modelVersion>4.0.0</modelVersion>
    
    <!--定位信息默认继承父 pom-->
    <artifactId>market-gateway</artifactId>
    
    <properties>
        <failOnMissingWebXml>false</failOnMissingWebXml>
    </properties>

    <!-- 
      1,默认会继承父 pom 的 dependencies 标签的依赖包,当然也可以在这里覆盖掉
      2,如果引用父 pom 的 dependencyManager 声明的依赖,可以忽略版本,使用父 pom 声明的版本,这样就做到版本同一管理
      -->
    <dependencies>
        
        <!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

        <!-- redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

        <!-- servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>

    </dependencies>
    
    <build>
        <!-- 打包插件 -->
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

参考文件

Maven 和 Git 学习笔记

标签:依赖,jar,Maven,pom,scope,org,junit
From: https://www.cnblogs.com/cnff/p/16935964.html

相关文章

  • 解决Maven Deploy时提示module java.base does not "opens java.util" to unnamed mod
    使用Maven向中央仓库推送项目时,遇到Unabletomakefieldprivatefinaljava.util.Comparatorjava.util.TreeMap.comparatoraccessible:modulejava.basedoesnot"opensjava.util"tounnamedmodule的错误提示。网上搜了下,大概是因为自Java9起,引入了模块系统(ProjectJig......
  • Maven项目报错:failed to execute goal org.apache.maven.plugins:maven-compiler-plug
    创建了一个maven项目,然后在编译时运行错误:“failedtoexecutegoalorg.apache.maven.plugins:maven-compiler-plugin:3.13.0:compile(default-compile)onprojectforum:thepluginorg.apache.maven.plugins:maven-compiler-plugin:3.13.0requiresmavenversion3.6.3-......
  • maven 中 scope标签的作用以及引入本地jar包打包方法
    1.scope标签的作用2、使用system标签项目三方jar存放位置结构:pom.xml中引入三方jar:<dependency><groupId>test</groupId><artifactId>testa</artifactId><version>0.0.1</version><scope>system</scope><s......
  • Maven配置国内镜像仓库和本地仓库
    参考文章:IDEA配置Maven教程(超详细版~)_ideamaven配置教程-CSDN博客1.找到Maven的 settings.xml文件我的按照路径是:C:\ProgramFiles\Java\apache-maven-3.9.8\conf2.打开settings.xml文件我的打开是这个样子3.增加本地仓库在根节点【<settings>】下找到【<localRep......
  • centos安装maven
    1.下载maven去官网选择自己需要的版本  Maven–DownloadApacheMaven复制链接2.使用wget下载先切换到opt文件夹再将复制的链接使用wget下载因为wget下载速度很慢,所以这里使用https://mirrors.tuna.tsinghua.edu.cn镜像cd/optwgethttps://mirrors.tuna.tsingh......
  • ] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin Ca
    [ERROR]Failedtoexecutegoalorg.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generate(default-cli)onprojectcom-zhianchen-pgsql:Executiondefault-cliofgoalorg.mybatis.generator:mybatis-generator-maven-plugin:1.3.7:generatefailed:Cann......
  • Linux安装Maven
    1、下载安装包,并上传到指定位置Maven官网: https://maven.apache.org/tar.gz下载地址:https://maven.apache.org/download.cgi2、解压安装包tar-zxvfapache-maven-3.9.8-bin.tar.gz3、配置环境变量vim/etc/profile#MAVEN配置exportMAVEN_HOME=/data/maven/apache-ma......
  • maven项目pom文件查看架包依赖处理架包冲突问题
    在运行maven项目的时候由于依赖冲突出现如下问题 项目中依赖了多个不同版本的slf4j类库,我们可以使用dependency:tree命令:  找到冲突的依赖,向上找到引入依赖的根源,在对应的pom文件里,添加 <exclusions> 标签即可<dependency><groupId>com.baidu.aip</groupId>......
  • maven 常见问题及解决方案
    1.resolutionwillnotbereattempteduntiltheupdateintervalofnexus强制更新mvncleaninstall-U2.Couldnotfindartifact如果可以通过其他途径获取到相关的jar包,可以把jar包安装到本地仓库:示例:demo.jar包上传后,项目中设置的依赖为<dependency><gr......
  • IDEA 中 maven 的 Lifecycle 和Plugins 的区别
    IDEA中maven的Lifecycle和Plugins的区别+目录IDEAmaven的Lifecycle与Plugins生命周期(Lifecycle)阶段(Phase)插件(plugin)和目标(goal)补充:idea中maven的Plugins和Lifecycle区别IDEAmaven的Lifecycle与PluginsIDEA主界面右侧Maven标签栏有同样的命令,比如install,......