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

Gradle 4.8+使用自定义配置打破了ivy publish

万明辉
2023-03-14

我有一个gradle文件,它在gradle的一些古老版本中工作,但我想升级到Gradle5.0。不幸的是,它使用了ivy而不是maven来发布它的JAR。我把它简化为一个简单的测试用例。

./gradlew wrapper && ./gradlew publish --info && cat build/publications/ivy/ivy.xml
  • 在4.7中可以正常工作。它发布主jar和源jar,并添加依赖项。
  • 如果切换到4.8,它会中断,它只发布源jar,主jar和依赖项都丢失了。
  • 如果切换到4.8并注释掉配置位,它将再次发布主jar和依赖项。

也许有一种新的做事方式,但如果是这样的话,我没有找到它的文档。这是原始建筑。格拉德尔。

plugins {
  id 'java'
  id 'ivy-publish'
}   

sourceSets {
  testSupport {
    java {
      compileClasspath += main.output
      runtimeClasspath += main.output
    }
  }
  test {
    java {
      compileClasspath += testSupport.output
      runtimeClasspath += testSupport.output
    }
  }
}

dependencies {
  compile group: 'com.ibm.icu', name: 'icu4j', version: '58.2'
  compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.5.3'
  compile group: 'io.swagger', name: 'swagger-parser', version: '1.0.32'
}

task sourceJar(type: Jar) {
  from sourceSets.main.allJava
}

task testSupportJar(type: Jar) {
  from sourceSets.testSupport.output
  appendix "test-support"
}

task testSupportSourceJar(type: Jar) {
  from sourceSets.testSupport.java.srcDirs
  appendix "test-support-sources"
}
artifacts {
  archives sourceJar
  archives testSupportJar
  archives testSupportSourceJar
}
publishing {
  repositories {
    ivy {
      name = 'myRepo'
      url = "file://${buildDir}/repo"
      layout "pattern", {
        artifact "[organisation]/[module]/[revision]/jars/[artifact].[ext]"
        ivy "[organisation]/[module]/[revision]/ivys/ivy-[revision].xml"
      }
    }
  }
  publications {
    ivy(IvyPublication) {
      organisation = 'com.example.com'
      // If you comment out the configurations below it will generate sensible ivy.xml
      configurations {
        "compile" {}
        "runtime" {}
      } 


      from components.java
      artifact(sourceJar) {
        type "source"
        extension "src.jar"
        conf "runtime"
      }
    }
  }
}

wrapper {
  // 4.7 works but 4.8+ doesn't.
  gradleVersion = '4.7'
}

共有1个答案

龙星辰
2023-03-14

哦,伙计,我刚刚想通了。它是components.java中的configurations元素位的相对顺序。如果configurations是第一个,那么它似乎会优先于components.java中的,而后者似乎会被忽略。如果您将components.java中的放在configurations之前,那么它就可以工作,并且您不必再手动声明默认情况下它生成的配置。

弗夫斯·格雷德尔。

 类似资料:
  • MOSN 自定义配置说明。 本文是对 MOSN 自定义配置的说明。 Duration String 字符串,由一个十进制数字和一个时间单位后缀组成,有效的时间单位为 ns、us(或?s)、ms、s、m、h,例如 1h、3s、500ms。 metadata metadata 用于 MOSN 路由和 Cluster Host 之间的匹配。 { "filter_metadata":{ "mo

  • 如果你想自定义 Next.js 的高级配置,可以在根目录下新建next.config.js文件(与pages/ 和 package.json一起) 注意:next.config.js是一个 Node.js 模块,不是一个 JSON 文件,可以用于 Next 启动服务已经构建阶段,但是不作用于浏览器端。 // next.config.js module.exports = { /* config

  • 我目前正在尝试设置一个从DB2读取配置值的自定义。由于ConfigSources是通过ServiceLoader加载的,因此看起来没有办法通过JPA访问数据库,因为ServiceLoader很早就在扫描自定义ConfigSources。 有什么想法吗?

  • Gitea 引用 custom 目录中的自定义配置文件来覆盖配置、模板等默认配置。 如果从二进制部署 Gitea ,则所有默认路径都将相对于该 gitea 二进制文件;如果从发行版安装,则可能会将这些路径修改为Linux文件系统标准。Gitea 将会自动创建包括 custom/ 在内的必要应用目录,应用本身的配置存放在 custom/conf/app.ini 当中。在发行版中可能会以 /etc/g

  • Examples Custom babel configuration 为了扩展方便我们使用babel,可以在应用根目录新建.babelrc文件,该文件可配置。 如果有该文件,我们将会考虑数据源,因此也需要定义 next 项目需要的东西,也就是 next/babel预设。 这种设计方案将会使你不诧异于我们可以定制 babel 配置。 下面是.babelrc文件案例: { "presets":

  • Examples Custom webpack bundle analyzer 可以使用些一些常见的模块 @zeit/next-css @zeit/next-sass @zeit/next-less @zeit/next-preact @zeit/next-typescript 注意: webpack方法将被执行两次,一次在服务端一次在客户端。你可以用isServer属性区分客户端和服务端来配置