maven build 成功但是 maven install 失败

本文详细介绍了Maven在构建项目时如何解析依赖,包括本地仓库与远程仓库的工作原理,以及如何配置私服和远程仓库,确保项目顺利构建。

maven build 成功就说明程序在引用maven中的依赖的时候没有出现  依赖包找不到的报错的行为,也就是说此时的maven文件是没有错误的,再查看一下maven的报错信息。

Could not resolve dependencies for project **.**:saleec:war

其中saleec是我们定义的project_name,因此基本可以确定是我们最近对pom文件的修改没有生效成新的引用,此时如果是eclipse,就点击maven -->update project 就可以了。

 

▲▲▲记得这个东西要勾选上

添加知识点:

【本地仓库和远程仓库的关系】

maven的仓库只有两大类:1.本地仓库 2.远程仓库,在远程仓库中又分成了3种:2.1 中央仓库 2.2 私服 2.3 其它公共库

本地仓库默认的地址是,~/.m2/settings.xml,

如果想要修改这个地址,就在引用 setting文件下写,

<settings>  
    <localRepository>D:\maven_new_repository</localRepository>  
</settings>  

这样就改成了D盘底下的maven_new_repository,如果想对所有的项目的默认地址改变的话,就修改.m2里头的setting文件,但是一般情况下不建议修改它,我们还是养成好习惯,用自建的setting'文件,便于做个性化配置嘛。

 

私服是一种特殊的远程仓库 是假设在局域网上的 当maven需要下载时会从私服请求 如果私服中不存在资源则从外部远程仓库下载 并缓存在私服上 我们可能把一些容易被墙的资源上传到私服上

 

远程仓库的配置怎么配呢?

<repositories>  
        <repository>  
            <id>jboss</id>  
            <name>JBoss Repository</name>  
            <url>http://repository.jboss.com/maven2/</url>  
            <releases>  
                <updatePolicy>daily</updatePolicy> <!-- 表示更新频率 never always interval daily daily为默认值  -->  
                <enabled>true</enabled>  
                <checksumPolicy>warn</checksumPolicy><!-- 表示maven检查和查验文件的策略 -->  
            </releases>  
            <snapshots>  
                <enabled>false</enabled>  
            </snapshots>  
            <layout>default</layout>  
        </repository>  
</repositories> 

出于安全并对主仓库进行安全认证

<servers>  
    <server>  
         <id>same with repository id in pom</id>  
         <username>username</username>  
         <password>pwd</password>  
    </server>  
</servers>  

本地仓库是远程仓库的一个缓冲和子集,当你构建Maven项目的时候,首先会从本地仓库查找资源,如果没有,那么Maven会从远程仓库下载到你本地仓库。这样在你下次使用的时候就不需要从远程下载了。如果你所需要的jar包版本在本地仓库没有,而且也不存在于远程仓库,Maven在构建的时候会报错,这种情况可能是有些jar包的新版本没有在Maven仓库中及时更新

你提到: > **“build 成功但是 library 中没有 maven 生成的包”** 这个描述通常出现在使用 IDE(如 IntelliJ IDEA)开发 Maven 项目时,意思是: ✅ `mvn clean install` 构建成功, ❌ 但在项目的依赖库(External Libraries)中看不到你自己的模块或它生成的 JAR 包。 这会导致你在其他模块中无法导入你自己写的类,比如: ```java import com.oda.apps.supplyportal.service.MyService; // ❌ 找不到符号 ``` --- ## ✅ 根本原因分析 Maven 项目构建成功后,会将你的代码打包成 JAR 并安装到本地仓库(通常是 `~/.m2/repository`),但 **IDE 可能没有正确识别模块之间的依赖关系**,导致“看不到自己生成的包”。 以下是常见原因和解决方案。 --- ### 🔍 常见原因与解决方案 --- ### ✅ 1. **未在 IDE 中正确导入 Maven 项目** 即使命令行 `mvn install` 成功,如果 IDE 没有以 **Maven 项目方式导入**,就不会自动加载依赖。 #### ✔️ 解决方法: 在 IntelliJ IDEA 中: 1. 打开项目根目录下的 `pom.xml` 2. 右键点击 `pom.xml` → **"Add as Maven Project"** 3. 或者:点击右侧 **Maven 工具栏** → 点击刷新按钮(Reload All Maven Projects) ✅ 此时你应该能在 **External Libraries** 中看到: - `Maven: com.yourgroup:your-artifact:1.0.0` - 所有依赖项 --- ### ✅ 2. **多模块项目中缺少模块依赖声明** 如果你是 **多模块项目(multi-module project)**,例如: ``` parent-project/ ├── module-a/ (你的业务代码,要被打成 jar) ├── module-b/ (另一个服务,想引用 module-a) └── pom.xml (父 POM) ``` 即使 `module-a` build 成功,`module-b` 也必须显式声明依赖: #### 在 `module-b/pom.xml` 中添加: ```xml <dependencies> <dependency> <groupId>com.oda.apps</groupId> <artifactId>supply-portal</artifactId> <!-- module-a 的 artifactId --> <version>1.0.0</version> </dependency> </dependencies> ``` 然后重新 reload Maven 项目。 ⚠️ 如果你不加这个依赖,IDE 就不会把 `module-a` 加入 `module-b` 的 classpath。 --- ### ✅ 3. **本地仓库中确实没有生成 JAR** 虽然 `mvn install` 显示成功,但可能没真装进去。 #### 检查本地仓库是否存在 JAR 文件: 路径一般为: ``` ~/.m2/repository/com/oda/apps/supply-portal/${version}/supply-portal-${version}.jar ``` 例如: ``` /Users/yourname/.m2/repository/com/oda/apps/supply-portal/1.0.0/supply-portal-1.0.0.jar ``` #### 如果不存在 → 手动强制安装: ```bash cd supply-portal/ # 进入该模块目录 mvn clean install -DskipTests ``` 然后再次检查仓库是否生成了 JAR。 --- ### ✅ 4. **IDE 缓存问题(IntelliJ 最常见)** IntelliJ 经常缓存旧的模块结构,导致新模块不显示。 #### 清理缓存并重启: 1. **File → Invalidate Caches / Restart…** 2. 选择 **Invalidate and Restart** 3. 重启后等待 Maven 自动 reload 或者手动刷新 Maven: - 点击右侧 **Maven 面板** - 点击 **刷新图标(Reload All Maven Projects)** --- ### ✅ 5. **项目 SDK 配置错误** 确保每个模块都正确设置了 Project SDK。 #### 检查步骤: 1. **File → Project Structure → Project** - 设置正确的 **Project SDK**(如 JDK 11) - 设置 **Project language level** 2. **Modules** 选项卡 - 确保你的模块被列出 - 源码路径(Sources)正确指向 `src/main/java` - Output path 指向 `target/classes` --- ### ✅ 6. **Maven Scope 问题 or Optional 依赖** 如果你的模块被标记为 `<optional>true</optional>` 或者 `<scope>test</scope>`,那么其他模块默认不会引入它。 #### 错误示例: ```xml <!-- 在 supply-portal 的 pom.xml 中 --> <dependency> <groupId>com.oda.apps</groupId> <artifactId>common-utils</artifactId> <version>1.0.0</version> <optional>true</optional> <!-- ❌ 其他模块不会自动继承 --> </dependency> ``` → 移除 `<optional>` 或显式在目标模块中声明依赖。 --- ### ✅ 7. **版本号 SNAPSHOT vs Release 不匹配** 如果你的模块是 `1.0.0-SNAPSHOT`,而别人引用的是 `1.0.0`,就会找不到。 #### 检查 `pom.xml` 版本一致性: ```xml <version>1.0.0-SNAPSHOT</version> ``` 所有依赖它的模块也要用相同版本: ```xml <dependency> <groupId>com.oda.apps</groupId> <artifactId>supply-portal</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency> ``` --- ### ✅ 8. **使用 `provided` scope 导致不参与运行时依赖** ```xml <scope>provided</scope> ``` 表示该依赖由容器提供(如 Servlet API),不会被打包也不会传递。如果你不小心用了这个 scope,外部项目就看不到你的包。 → 改为默认 scope(compile): ```xml <!-- 默认就是 compile,可以省略 --> <scope>compile</scope> ``` --- ## ✅ 排查流程图(建议顺序) | 步骤 | 操作 | |------|------| | 1 | 检查 `~/.m2/repository` 是否存在你模块的 JAR | | 2 | 在 IDE 中右键 `pom.xml` → Add as Maven Project | | 3 | 刷新 Maven(点击刷新按钮) | | 4 | 多模块项目:确认依赖已声明 | | 5 | 清理缓存:Invalidate Caches & Restart | | 6 | 检查版本号、groupId、artifactId 是否一致 | | 7 | 查看 External Libraries 是否出现 `Maven: com.xxx:xxx:version` | --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值