依赖于私有仓库nexus 改为使用默认或者阿里镜像打包运行

今天的工作任务

将之前项目依赖于私有仓库nexus 改为使用默认或者阿里镜像打包运行。

将本地开发环境移动到云上。

Q: 如何判断已经使用私有仓库,并且更改了groupId 、artifactId及version 的jar,应该替换成哪个jar呢?

A: 首先通过查看本地的Maven repository 地址,找到私有云加载到本地的jar资源,如:xxx/com/xxxx。目录结构,之后再到对应的jar文件,进行解压。查看META-INF(这个目录是Maven打包生成的)目录下找到pom.properties。其中就有对应真实的groupId等信息。

在上maven repository 网站找到对应的,依赖配置文件,进行替换就可以了。

刚刚说的是开源文件从私有仓库,替换为公共镜像地址的流程。

如果是私有jar,只能通过项目引用的方式进行了。

通过添加对应scope 和systemPath标签可以进行引用。

<dependency>
            <groupId>com.zuifuli</groupId>
            <artifactId>icare-open-sdk</artifactId>
            <version>1.2.3</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/icare-open-sdk-1.2.3.jar</systemPath>
</dependency>

还有一种方式

mvn install:install-file -DgroupId=com.test -DartifactId=juint -Dversion=1.0.0 -Dpackaging=jar -Dfile=juint.jar

这种方式个人觉得,如果依赖多的话 还需要经常操作。比较麻烦就没有尝试使用。

Q:使用第二种更改配置的方法 可能会出现java.lang.NoClassDefFoundError问题

A: 原因是scope 使用范围的问题:

依赖于私有仓库nexus 改为使用默认或者阿里镜像打包运行

maven打war包 可以使用

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}/libs</directory>
                            <targetPath>WEB-INF/libs</targetPath>
                            <filtering>true</filtering>
                            <includes>
                                <include>**/*.jar</include>
                            </includes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

jar 包的话 可以使用:

<resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <!-- <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource> -->
</resources>

Q: Exception in thread "main" java.lang.IllegalStateException: Failed to get nested archive for entry BOOT-INF/lib/icare-open-sdk-1.2.3.jar

A: 是因为这个jar 存在问题,导致无法加载

T:Spring Boot 通过Maven 打包生成的jar包,结构中目前包括三个目录:

  • org 这个目录是Spring 加载jar和class文件使用的,通过java -jar 运行,现执行其中的class文件 ,其中的JarFile,JarEntry.. 默认加载BOOT-INT/lib 其中的jar 依赖 和BOOT-INT/class 项目文件
  • BOOT-INF:存在源文件和项目依赖的jar
  • META-INF:maven打包生成的一些配置文件

Q: 为什么通过添加Maven配置,打入BOOT-INF/lib jar 变大了呢?并且无法正常解压使用(265kb-488kb)

<dependency>
            <groupId>com.zuifuli</groupId>
            <artifactId>icare-open-sdk</artifactId>
            <version>1.2.3</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/src/main/resources/icare-open-sdk-1.2.3.jar</systemPath>
</dependency>
<resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/*.jar</include>
                </includes>
            </resource>
            <!-- <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource> -->
</resources>

A: 这个问题没有继续探索,而是了一种加载本地资源的方式 。这次成功运行了。

<plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <configuration>
                    <nonFilteredFileExtensions>
                        <nonFilteredFileExtension>ttf</nonFilteredFileExtension>
                    </nonFilteredFileExtensions>
                </configuration>
            </plugin>
<!-- 这个plugin 是我添加的 -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <includeSystemScope>true</includeSystemScope>
                </configuration>
            </plugin>
            <!-- <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                <compilerArguments>
                    <extdirs>${project.basedir}/src/main/resources</extdirs>
                </compilerArguments>
                </configuration>
            </plugin> -->
</plugins>
上一篇:阿里云钉钉ServerLess实战第三课


下一篇:阿里云 serverLess 实战营第二课