美文网首页
Java 包管理与 Maven

Java 包管理与 Maven

作者: BitterOutsider | 来源:发表于2020-06-06 21:07 被阅读0次

    • JVM的⼯工作被设计地相当简单:

      • 执⾏一个类的字节码。
      • 假如这个过程中碰到了新的类,加载它。
    • 类的全限定类名(目录层级)唯一确定了一个类。

    • 包就是把许多类放在一起打的压缩包。

    • 当多个同名类出现在一个 Classpath 中时,麻烦开始了。

    包管理

    • What

      • 包管理的本质就是告诉 JVM 如何找到所需的第三方类库。
      • 成功地解决其中的冲突问题。
    • How

      • ⼿动写命令进行编译运⾏
      • Apache Ant
      • Maven

    Maven

    • 首先 Maven 不仅仅是包管理工具,但这里只讨论其包管理能力。
    • Maven 会有中央仓库和本地仓库两个仓库:
      • 本地仓库默认位于~/.m2目录中,里面会放置一些经过下载的第三方包的缓存。
      • 中央仓库一个包会含有 groupIdartifactIdversion 三个字段,在中央仓库中,一个包存放的路径也是以这三个字段来存放的,具体会存放在 groupId/artifactId/version 这个位置。
    • pom.xml 中添加包的信息,Maven 就会自动帮你下载这些包以及其相关依赖包到本地中缓存起来。

    Maven 如何解决冲突

    包冲突.jpg
    • 常见冲突报错:
      • AbstractMethodError
      • NoClassDefFoundError
      • ClassNotFoundException
      • LinkageError
    • 方法 1 是 Maven 默认解决方式为。
      • 原则:最近的胜出
    • 方法 2 手动忽略最近的包,可由以下代码实现。
      <dependency>
        <groupId>xxx</groupId>
        <artifactId>xxx</artifactId>
        <version>1.0.0</version>
        <exclusions>
          <exclusion>
              <groupId>yyy</groupId>
            <artifactId>yyy</artifactId>
          </exclusion>
        </exclusions>
      </dependency>
      
    • 方法 3 则手动创建了最近的包。
    • 使用 Maven Helper 插件,帮助解决冲突。
    • pom.xml 文件中,可以通过设置 scope 标签,来指定一个包是否可以被生产代码和测试代码所引用:
      • complie(生产代码以及测试代码均可见)
      • test(只有测试代码可见)
      • provided(只在编译的生产代码的时候生效,在运行时无效)

    完。

    相关文章

      网友评论

          本文标题:Java 包管理与 Maven

          本文链接:https://www.haomeiwen.com/subject/jfmftktx.html