强制Gradle/Maven刷新缓存并重新从Nexus下载依赖jar包

本文介绍了解决Gradle和Maven在搭建Nexus私服时遇到的依赖问题的方法,包括如何处理本地缓存缺失导致的下载失败,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文  http://www.jackyshen.com/2015/10/18/force-gradle-maven-to-refresh-cache-or-download-dependency-jar-from-nexus/?utm_source=tuicool&utm_medium=referral


最近需要搭建一个Nexus私服,完全不能连接外网的那种,各种Jar包都是手动拷过来的。

问题

第一次上传某个jar包(比如junit-4.12.jar)到Nexus上,然后调用 gradle build 可以正确下载到依赖包。但如果手动删掉了本地缓存的jar包(在 ~/.gradle 下),这时从Nexus的下载过程中断,或者Nexus上暂时不存在这个jar包,那么即使Nexus恢复了正常下载,下次执行 gradle build 时就一直提示不能够找到jar包。

FAILURE: Build failed with an exception.

- What went wrong:
Could not resolve all dependencies for configuration ':testCompile'.
> Could not find junit:junit:4.12.
  Searched in the following locations:
      http://localhost:8081/nexus/content/groups/public/junit/junit/4.12/junit-4.12.pom
      http://localhost:8081/nexus/content/groups/public/junit/junit/4.12/junit-4.12.jar
  Required by:
      org.codehaus.sonar:example-java-maven:1.0-SNAPSHOT

解决方案

回到自己的工作目录下,带参数执行gradle强制刷新 ~/.gradle 下的文件缓存

gradle build --refresh-dependencies

参考 Gradle manual

The –refresh-dependencies option tells Gradle to ignore all cached entries for resolved modules and artifacts. A fresh resolve will be performed against all configured repositories, with dynamic versions recalculated, modules refreshed, and artifacts downloaded.

如果是Maven遇到不能刷新本地依赖的话,需要做两件事情:

  1. 到 ~/.m2 下,看看jar包路径是不是带有”.lastUpdated”,有的话就删除之。
  2. 带参数强制刷新 mvn build -U

另外,如果从Nexus将Jar包删除,或重新上传时(需要设置Configuration->Deployment Policy为Allow Redeploy),有时需要在Browse Storage中,右键Jar包路径,先”Update Index”再”Expire Cache”。注意这里是刷新Nexus自身的缓存和索引,不是开发目录本地的缓存!


<think>我们正在处理一个关于在Android Studio中配置Nexus私服仓库(括本地和远程)以及上传JAR的问题。下面将分步骤详细说明。 ### 1. 配置Nexus私服仓库 在Android Studio中配置Nexus私服仓库,需要在项目的构建脚本中声明仓库地址。通常,我们会在项目的`build.gradle`(位于项目根目录)或模块的`build.gradle`文件中添加仓库。 #### 配置远程仓库 假设你的Nexus私服远程仓库地址为:`http://your-nexus-server:8081/repository/maven-releases/`(请替换为实际地址),则配置如下: ```groovy // 在项目根目录的build.gradle中,为所有项目配置仓库 allprojects { repositories { // 其他仓库... maven { url "http://your-nexus-server:8081/repository/maven-releases/" // 如果需要认证 credentials { username = 'your-username' password = 'your-password' } } } } ``` #### 配置本地仓库(如果需要) 如果你在本地搭建了Nexus且希望通过本地网络访问,配置方式与远程相同,只需将URL替换为本地地址,例如:`http://localhost:8081/repository/maven-releases/`。 ### 2. 上传JARNexus仓库 上传JAR通常使用Maven插件。在Android Studio中,我们可以在模块的`build.gradle`文件中配置上传任务。 #### 步骤: 1. **应用Maven插件**:在模块的`build.gradle`文件顶部添加: ```groovy apply plugin: 'maven-publish' ``` 2. **配置发布任务**:在同一个文件中,添加发布配置: ```groovy publishing { publications { mavenJava(MavenPublication) { // 指定构建产物(例如jar) artifact file("$buildDir/outputs/aar/your-module-name-release.aar") // 如果是AAR,通常Android库模块生成的是AAR // 或者如果你要上传JAR,可以指定JAR任务,例如:jar // artifact jar // 配置POM文件(必要信息) groupId 'com.your.group' artifactId 'your-artifact-id' version '1.0.0' } } repositories { maven { url "http://your-nexus-server:8081/repository/maven-releases/" credentials { username = 'your-username' password = 'your-password' } } } } ``` 注意:如果你上传的是Android库,通常生成的是AAR文件,路径如上述所示。如果你确实需要上传JAR(例如纯Java库),则需要先配置一个生成JAR的任务,然后在上面的`artifact`中引用该任务。 3. **执行上传任务**:在Android Studio的Gradle面板中,找到该模块下的`publishing`组,运行`publish`任务。 ### 3. 生成JAR(如果需要) 如果你的模块是Android库,默认生成的是AAR。如果你需要生成JAR(例如,不含资源文件),可以添加一个任务: ```groovy task jar(type: Jar) { from android.sourceSets.main.java.srcDirs archiveClassifier.set('') } ``` 然后,在发布配置中引用这个任务: ```groovy artifact jar ``` ### 注意事项 - 确保Nexus仓库已经正确配置,且你有上传权限。 - 如果使用HTTP而不是HTTPS,可能需要在`gradle.properties`中设置`org.gradle.unsafe.http.connection=true`(不推荐,应使用HTTPS)。 - 建议将用户名和密码放在`gradle.properties`文件中(不要提交到版本控制),然后在`credentials`中引用: ```groovy credentials { username = nexusUsername password = nexusPassword } ``` ### 引用 关于Gradle发布到Maven仓库的更多信息,可以参考[Gradle官方文档](https://docs.gradle.org/current/userguide/publishing_maven.html)[^1]。 §§相关问题§§ 1. 如何配置Nexus仓库使用HTTPS? 2. 如何上传Android AARNexus仓库? 3. 在Gradle中如何安全地管理仓库认证信息?</think>### Android Studio 配置 Nexus 私服仓库及上传 JAR 指南 #### 一、配置 Nexus 本地/远程仓库 1. **创建 Nexus 仓库** 在 Nexus 管理界面创建仓库(建议选择 maven2 类型): - 本地仓库:`maven-local`(默认已存在) - 远程代理仓库:`maven-central`(代理 Maven Central) - 托管仓库:`maven-releases`/`maven-snapshots`(存放自定义) 2. **配置项目级仓库(`build.gradle`)** 在项目根目录的 `build.gradle` 中添加: ```groovy allprojects { repositories { // 本地仓库(需先启动Nexus服务) maven { url "http://localhost:8081/repository/maven-local/" allowInsecureProtocol = true // 允许HTTP } // 远程仓库 maven { url "http://your-nexus-ip:8081/repository/maven-central/" allowInsecureProtocol = true } // 托管发布仓库 maven { url "http://your-nexus-ip:8081/repository/maven-releases/" credentials { username = "admin" password = "your_password" } allowInsecureProtocol = true } } } ``` 3. **配置模块级依赖(`app/build.gradle`)** ```groovy dependencies { implementation 'com.your.group:artifact:1.0.0' // 从Nexus拉取 } ``` #### 二、上传 JAR Nexus 1. **配置上传脚本** 在模块的 `build.gradle` 中添加: ```groovy apply plugin: 'maven-publish' publishing { publications { mavenJava(MavenPublication) { groupId = 'com.your.group' artifactId = 'your-artifact' version = '1.0.0' // 上传JAR artifact("$buildDir/libs/your-lib.jar") // 或上传AAR(Android库) // artifact("$buildDir/outputs/aar/your-lib-release.aar") } } repositories { maven { url = "http://your-nexus-ip:8081/repository/maven-releases/" credentials { username "admin" password "your_password" } allowInsecureProtocol = true } } } ``` 2. **生成上传 JAR** - 执行 Gradle 任务: ```bash ./gradlew your-module:assemble ./gradlew your-module:publish ``` - 在 Android Studio 的 Gradle 面板中找到 `publishing > publish` 3. **验证上传** 访问 Nexus 控制台: `http://your-nexus-ip:8081/#browse/browse:maven-releases` 检查是否存在 `com/your/group/your-artifact/1.0.0/` #### 三、安全增强建议 1. **使用 HTTPS 替代 HTTP** 在 Nexus 配置 SSL 证书后,将 URL 改为 `https://` 2. **加密凭证** 在 `gradle.properties` 中添加: ```properties nexusUser=admin nexusPass=your_encrypted_password ``` 在 `build.gradle` 中引用: ```groovy credentials { username nexusUser password nexusPass } ``` #### 常见问题排查 - **HTTP 协议被阻止**:添加 `allowInsecureProtocol = true` - **认证失败**:检查 Nexus 的「Realms」设置是否启用 `Docker Bearer Token` - **依赖拉取失败**:确保仓库类型正确(release/snapshot) - **Gradle 缓存问题**:运行 `./gradlew --refresh-dependencies` > 提示:生产环境建议使用 `Nexus Repository Manager 3` 配置[用户权限](https://help.sonatype.com/repomanager3/security)[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值