现象:
在maven的pom.xml依赖配置里加了一个SNAPSHOT版本的依赖:
<dependency> <groupId>com.yame.ecpark</groupId> <artifactId>ecpark-cache-driver</artifactId> <version>1.6.3-SNAPSHOT</version> </dependency>
程序运行到相关代码的时候,报了一个找不到类的异常:
这个Client类明明就在ecpark-cache-driver-1.6.3-SNAPSHOT.jar里面,并且打包好的lib文件夹里,也存在该
jar包:
为什么还报找不到类的异常呢??
想了好久,幸得高人同事指点,反编译maven打包后的jar文件,看看里面jar文件的依赖路径:
茅塞顿开!!!!
这里,Class-Path: ./ lib/ecpark-cache-driver-1.6.3-20180412.072035-2.jar lib,写得很清楚,依赖的ecpark-cache-driver版本带有时间日期版本,但lib包里的,只有一个ecpark-cache-driver-1.6.3-SNAPSHOT.jar,都不是同一个文件,所以就怪不得找不到Client类了。
知道问题原因之后,就好办了。
在maven打包时候,指定<useUniqueVersions>false</useUniqueVersions> ,如:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.yame.Application</mainClass> <useUniqueVersions>false</useUniqueVersions> </manifest> <manifestEntries> <Class-Path>./</Class-Path> </manifestEntries> </archive> </configuration> </plugin>
这样,在打包的时候,
MANIFEST.MF中的Class-Path: lib/ecpark-cache-driver-1.6.3-20180412.072035-2.jar
转化成Class-Path:/lib/ecpark-cache-driver-1.6.3-SNAPSHOT.jar
同时lib文件夹下面也存在ecpark-cache-driver-1.6.3-SNAPSHOT.jar,这样就不会报找不到类的异常了。
相关推荐
根据提供的文件信息,我们可以了解到这是一个基于Maven构建的Web服务客户端项目。该POM(Project Object Model)文件定义了项目的元数据以及构建过程中的配置,包括项目的基本信息、构建插件配置以及所需的依赖库等...
解决 Maven 无法下载 fastdfs-client-java-1.29-SNAPSHOT 依赖,直接下载之后用maven命令存储到本地maven仓库即可。 maven命令 mvn install:install-file -DgroupId=org.csource -DartifactId=fastdfs-client-java ...
6. **分析并重构代码**:如果上述方法都不能解决问题,可能需要深入分析代码,看是否能修改代码以适应不同版本的依赖,或者重构代码以减少对特定库的依赖。 解决Maven的包冲突需要耐心和细心,通过理解项目的依赖...
这样,Maven会首先尝试从私服下载依赖,找不到时再从公共仓库下载。 4. **部署私有库**:使用Maven的`deploy`命令,将内部项目打包并上传至Nexus的特定仓库。通过配置`<distributionManagement>`标签,指定发布目标...
3. 搜索和配置依赖项:通过Maven中央仓库网站搜索依赖,并将其配置到pom.xml中。 4. Maven命令行操作:使用命令行运行Maven任务,实现手动下载依赖包。 5. 依赖包存放结构:掌握Maven下载的依赖包存放的位置以及如何...
描述中提到的"netcdfAll-5.5.4-SNAPSHOT.jar"是一个包含所有相关组件和依赖的打包文件,很可能是一个Maven项目的一部分。Maven是Java开发中常用的一个项目管理和综合工具,它通过管理项目的构建、报告和文档,帮助...
Maven首先会在本地库查找依赖,如果找不到,会从配置的远程仓库(如中央仓库)中下载。通过`~/.m2/settings.xml`文件可以配置镜像,提高下载速度。 6. Snapshots与Releases: Maven还支持SNAPSHOT版本的管理,...
本文将针对几个常见的Maven问题及其解决方法进行详细解析。 #### 问题1:依赖解析失败 **错误信息示例**: ``` [ERROR] Failed to execute goal on project biz_zhuhai: Could not resolve dependencies for ...
这个仓库扮演着缓存的角色,当Maven构建项目时,首先会检查本地仓库中是否已经存在所需的依赖,如果存在则直接使用,若不存在,则从远程仓库下载并存入本地仓库。 **Maven仓库层级结构:** Maven仓库中的文件结构...
3. **缓存机制**:当Maven首次下载一个库到本地仓库后,它会被缓存起来,下次构建时Maven会首先查找本地仓库,不需要每次都连接到远程仓库。 4. **代理仓库**:如果企业内网无法直连互联网,可以设置私有的Nexus或...
- **依赖管理**: 在POM.xml中声明项目依赖,Maven会自动解决依赖关系,从仓库下载并管理它们。 - **插件**: Maven的扩展性主要体现在插件上,如`maven-compiler-plugin`用于编译Java代码,`maven-surefire-plugin`...
在Maven的配置文件`settings.xml`中,可以定义多个远程仓库的URL,以便Maven在本地找不到依赖时去这些仓库查找。此外,还可以设置镜像,将对中央仓库的请求重定向到指定的镜像服务器,以提高下载速度。 4. 依赖...
但有时可能会遇到依赖找不到或版本冲突的问题,这时需要检查pom.xml的配置和网络连接。 2. **生命周期与构建目标**: Maven的生命周期包括清理(clean)、编译(compile)、测试(test)、打包(package)、验证...
- `system` - 系统依赖范围,依赖范围同 `provided` 但此类不经过 Maven 库解析,往往与本地的 jar 包地址绑定。 #### 五、传递性依赖 当一个项目 A 引入了一个依赖 B,而 B 又有其自身的依赖 C,则 C 被称为传递...
当项目引用SNAPSHOT依赖时,Maven会在构建时检查中央仓库是否有新的SNAPSHOT更新,以确保总是使用最新的代码。 8. **多模块项目**:大型项目通常由多个子模块组成,Maven的多模块项目管理允许在一个父`pom.xml`中...
- `PATH`: 添加`%MAVEN_HOME%\bin`(Windows)或`/usr/local/apache-maven-3.3.9/bin`(Linux/Mac)到系统路径中。 在Windows系统中,可以通过系统属性->高级系统设置->环境变量进行设置;在Linux或Mac上,可以通过...
当多个依赖包含相同JAR但版本不同时,Maven有优先级规则来解决冲突,一般采用“最近使用”原则。 7. **多模块项目**: 大型项目往往由多个模块组成,Maven支持多模块项目管理。每个子模块都有自己的POM,而父POM...
- **冲突解决(Conflict Resolution)**:当存在版本冲突时,Maven会按照一定的规则来决定使用哪个版本的依赖。 5. **项目关系(Project Relationships)** - **坐标(Coordinates)**:Maven通过坐标来唯一标识一个...
如果找不到,它会转向远程仓库。 远程仓库可以是公开的,例如Maven Central,这是一个全球性的中央存储库,包含了大量开源项目发布的工件;也可以是私有的,比如Artifactory或Nexus,这些是企业级的Maven仓库服务器...
在解压"apache-maven-3.6.3"后,用户通常会配置Maven的环境变量,如`M2_HOME`,将bin目录添加到PATH中,以便于在命令行中直接使用mvn命令。此外,还需要配置`settings.xml`文件,用于设定本地仓库位置、远程仓库以及...