zoukankan      html  css  js  c++  java
  • maven 学习总结

    一、下载nexus 私服管理工具并安装

    二、发布项目工具包到私服

    1、pom.xml中配置如下,id与setting.xml 中server中的id保持一致

    <distributionManagement>
            <repository>
                <id>maven-releases</id>
                <name>Nexus Release Repository</name>
                <url>http://localhost:8081/repository/maven-releases/</url>
            </repository>
            <snapshotRepository>
                <id>maven-snapshots</id>
                <name>Nexus Snapshot Repository</name>
                <url>http://localhost:8081/repository/maven-snapshots/</url>
            </snapshotRepository>
        </distributionManagement>

    2、配置setting.xml

     <server>
            <id>maven-releases</id>
              <username>admin</username>
              <password>12345</password>
        </server>
        <server>
            <id>maven-snapshots</id>
              <username>admin</username>
              <password>12345</password>
        </server>

    3、执行maven deploy 命令,如果要发布快照版本到私服,只需要修改版本号后加上-SNAPSHOT(注意这里必须是大写)

    三、对快照版本和发布版本的理解

    1. Snapshot版本代表不稳定、尚处于开发中的版本

    2. Release版本则代表稳定的版本

    3. 什么情况下该用SNAPSHOT?
    协同开发时,如果A依赖构件B,由于B会更新,B应该使用SNAPSHOT来标识自己。这种做法的必要性可以反证如下:

    a.如果B不用SNAPSHOT,而是每次更新后都使用一个稳定的版本,那版本号就会升得太快,每天一升甚至每个小时一升,这就是对版本号的滥用。

    b.如果B不用SNAPSHOT, 但一直使用一个单一的Release版本号,那当B更新后,A可能并不会接受到更新。因为A所使用的repository一般不会频繁更新release版本的缓存(即本地repository),所以B以不换版本号的方式更新后,A在拿B时发现本地已有这个版本,就不会去远程Repository下载最新的B

    4. 不用Release版本,在所有地方都用SNAPSHOT版本行不行?
    不行。正式环境中不得使用snapshot版本的库。 比如说,今天你依赖某个snapshot版本的第三方库成功构建了自己的应用,明天再构建时可能就会失败,因为今晚第三方可能已经更新了它的snapshot库。你再次构建时,Maven会去远程repository下载snapshot的最新版本,你构建时用的库就是新的jar文件了,这时正确性就很难保证了。

    四、maven 依赖与继承的理解

    1、maven 依赖

    对于一些如mysql 连接 分页的包 ,不能传递依赖,因为这些包在项目启动时调用


    dependencyManagement 这个标签知识管理,不会应用到父模块及子模块

    依赖了一个jar后,出现jar 包冲突,回引起启动报错

    有些jar包会依赖在其他的包里面存在,如
    com.google.gson  会存在于阿里云的核心包里面

     2、将依赖包到打包的jar 中,形成超级jar 实用参数package shade

     <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>

    3、a 模块依赖b 模块,b中引用的jar同样在a中可以引用到,但是有些项目启动时的jar或编译时的jar 则不能引用到 a ,如mysql pagehader eureka  这些包,具体原因还要再分析分析

    五、版本冲突

    1.a 中应用了lombok 1.16.18版本 ,b依赖 a ,如果b 也使用1.16.18 ,则不会引起版本冲突,但是如果b 中版本和a 中不一致,则会引起冲突,编译则不通过

     2.a 中引用了  spring-cloud-starter-eureka 包,b依赖a ,不管b是否引用 spring-cloud-starter-eureka 包 都会启动报错(错误: 找不到或无法加载主类 com.kexin.deviceAccessService.DeviceAccessServiceApp),但是编译不会报错,如果a 中没有引用该包,b中引用了则通过编译和启动,如果b没有引用该包则编译报错

  • 相关阅读:
    SSL证书指令
    重启机器解决SSL都要输入密码问题
    Nginx + Apache 反向代理
    Ubuntu Nginx安装
    Nginx配置文件详解
    Linux SSL 双向认证 浅解
    SSL 双向认证
    linux ssl 双向认证
    ubuntu apache2 ssl配置
    vi编辑器命令
  • 原文地址:https://www.cnblogs.com/lufei33180/p/12983209.html
Copyright © 2011-2022 走看看