当前位置: 首页 > 知识库问答 >
问题:

使用Gradle构建时读取maven settings.xml?

阚英武
2023-03-14
 /home/u123/.m2/settings.xml

其中我指定了一个远程maven存储库:

<?xml version="1.0" encoding="UTF-8"?>
<settings>
  <profiles>
    <profile>
      <id>default</id>
      <repositories>
          <repository>
              <id>my.repo</id>
               <url>http://myrepo/ </url>
          </repository>
      </repositories>
    </profile>
  </profiles>
  <activeProfiles>
    <activeProfile>default</activeProfile>
  </activeProfiles>
</settings>

在这个回购中,我部署了一个工件--实际上它是一个gradle插件。

现在我尝试使用下面的build.gradle文件构建另一个需要使用这个插件/工件的项目:

apply plugin: 'java'
apply plugin: 'maven'

buildscript {
    dependencies {
        classpath 'com.test:my-gradle-plugin:1.0.0-SNAPSHOT'
    }
}
...
> Could not find group:com.test, module:my-gradle-plugin, version:1.0.0-SNAPSHOT.
...

即使我有上面的settings.xml文件指向远程maven存储库,Gradle也找不到my-gradle-plugin。

如果我在build.gradle文件中指定存储库,它就会起作用:

buildscript {
    repositories {
        maven {
            url "http://myrepo/"
        }
    }
    dependencies {
        classpath 'com.test:my-gradle-plugin:1.0.0-SNAPSHOT'
    }
}

根据本职位:

http://forums.gradle.org/gradle/topics/have_mavenlocal_check_m2_home_conf_settings_xml

似乎gradle考虑了settings.xml文件,那么有什么问题呢?

共有1个答案

聂炜
2023-03-14

有一张与此相关的未开罚单将有望实现:

http://issues.gradle.org/browse/gradle-2365

但是作为一种变通方法,您可以在build.gradle中使用一些groovy脚本来实现这一点。在我的例子中,我需要settings.xml中的身份验证信息。但可以很容易地对其进行调整以获取存储库信息。

示例:

def getMavenSettingsCredentials = {
    String userHome = System.getProperty( "user.home" );
    File mavenSettings = new File(userHome, ".m2/settings.xml")
    def xmlSlurper = new XmlSlurper()
    def output = xmlSlurper.parse(mavenSettings)
    return output."servers"."server"
}

def getCredentials = {
    def entries = getMavenSettingsCredentials()
    for (entry in entries) {
        if ( entry."id".text() == "my-server" ) {
            return [username: entry.username.text(), password: entry.password.text()]
    }
  }
}
uploadArchives {
def creds = getCredentials()
repositories.mavenDeployer {
    configuration = configurations.deployerJars
    repository(url: "http://my-release-repository/releases/") {
        authentication(userName: creds["username"], password: creds["password"])
    }
    snapshotRepository(url: "http://my-snapshot-repository/snapshots/") {
        authentication(userName: creds["username"], password: creds["password"])
    }


  }
}
 类似资料:
  • 我的Windows 10笔记本电脑上安装了最新的Android Studio IDE,在我的Windows操作系统进行了巨大的自动更新之前,它一直运行良好。 现在,当我启动我的Android Studio IDE时,我得到了以下错误,它不能构建。 Gradle同步失败:读取超时查看IDE日志了解更多详细信息(帮助|显示日志)(3m34s 195ms) 我需要帮助。

  • 嗨,我有两个项目,文件如下: 项目1:构建。格拉德尔 项目2:构建。格拉德尔 当我从Project 1执行test1任务时,我得到以下错误: 正在运行任务测试2 失败:生成失败,出现异常。 > 错误:评估脚本时出现问题。建筑属性(无此类文件或目录) 尝试:使用--stacktrac选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获取更多日志输出。 建筑失败 总时间:5.779秒

  • 问题内容: 我是Gradle新手。我想构建一个uberjar(AKA fatjar),其中包括项目的所有传递依赖项。我需要在“ build.gradle”中添加哪些行? 这是我目前拥有的:(我是从几天前的某个地方复制的,但是不要从那里收集。) 问题答案: 您是否尝试过 gradle食谱中 的fatjar示例? 您正在寻找的是gradle 的影子插件

  • 我正在尝试使用gradle/Clojuresque来构建clojure代码,运行它,并获得uberjar。我使用来自http://dev.clojure.org/display/doc/Getting从Gradle开始,https://bitbucket.org/kotarak/clojuresque/wiki/Getting开始了,但“找不到我们”。bpsm:ednjava:0.4。Clojur

  • Gradle提供了许多内置任务来收集构建信息. 这些内置任务对于了解依赖结构以及解决问题都是很有帮助的. 了解更多, 可以参阅项目报告插件以为你的项目添加构建报告

  • 我使用gradle创建了一个简单的java项目,从“gradle init——类型java应用程序”开始。 主java文件的内容-“App.java”: 文件“build.gradle”的内容: gradle似乎已成功下载log4j jar文件: 在~/中有一组log4j jar/pom文件。gradle目录。当我尝试生成时,出现以下生成错误: 我对gradle/java是新手。任何帮助都将不胜感