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

Gradle/Java:生成具有可执行Java类的资源

屈博
2023-03-14

情况如下:

  • 在gradle构建期间,我从依赖项下载并解压缩资源
  • 项目中的一个类将处理这些资源,并生成要包含在项目中的新资源(作为生成的资源)

我设法想出了一个简单的解决方案,在“classes”任务之后运行生成器,并将资源写入$buildDir/resources/main/schema

ext {
    schemaGenerator = "org.something.JsonSchemaGenerator"
    serviceContractsDir = file("$buildDir/service-contracts")
    schemaOutputDir = file("$buildDir/resources/main/schema")
}

task jsonSchemas(type: Exec) {
    dependsOn classes
    dependsOn serviceContracts

    commandLine "java", "-classpath", sourceSets.main.runtimeClasspath.getAsPath(), schemaGenerator, serviceContractsDir, schemaOutputDir
}

test.dependsOn jsonSchemas
assemble.dependsOn jsonSchemas

这很好,生成的资源随后包含在JAR中
但是当上传人工制品时,它会上传JAR,而不会上传生成的资源。

我试图用正确的方法来做:

ext {
    schemaOutputDir = file("$buildDir/generated-resources")
}

sourceSets.main.output.dir schemaOutputDir, builtBy: jsonSchemas

但我最终得到了一个循环依赖,因为Gradle需要资源来构建类,而生成这些资源的任务也取决于类:


出了什么问题:
以下任务之间的循环依赖关系:
:类
---:jsonSchemas

有没有办法将它们添加到适当的源代码集中(如生成的资源),以便

  • 测试可见

共有1个答案

黄凌龙
2023-03-14

添加独立于主源集的新源集应该可以做到:

task jsonSchemas(type: Exec) {
  // same as above
}

sourceSets {
  schema {
    output.dir(schemaOutputDir, builtBy: 'jsonSchemas')
  }
  test {
    resources.srcDirs += [sourceSets.schema.output]
  }
}

jar {
  from sourceSets.schema.output
}
 类似资料:
  • 问题内容: 我想使用Gradle任务为 Java 项目生成Java类,类似于Android插件如何使用表示法创建,例如: 用例是我正在开发一个开源应用程序,该应用程序需要使用API​​密钥和机密。我拥有不致力于我的VCS 的密钥和秘密。 到目前为止,我有这个: 并且有效- 在指定位置生成该文件。但是它非常脆弱。明确命名软件包很容易出错。只要文件可以在其他软件包中生成(例如,在的根目录),只要能够使

  • 我正在使用spring boot部署应用程序 在我的pom里我有: 知道吗?

  • 本文向大家介绍java生成验证码工具类,包括了java生成验证码工具类的使用技巧和注意事项,需要的朋友参考一下 java生成验证码工具类,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 我正在使用gradle构建我的项目,使用以下build.gradle文件: 当我输入gradle build命令时,我希望gradle在生成后执行一个任务。 我在网上找到了一个,我尝试了多种方法都失败了。 如果你知道怎么做,请告诉我。

  • 问题内容: 我有一个项目{a,b,c,d}的列表,当我需要生成所有可能的组合时, 您可以选择任意数量的项目 顺序不重要(ab = ba) 空集不被考虑 如果我们抓住可能性,那就应该是 我使用了以下递归方法: 当数组大时,有没有更有效的方法? 问题答案: 将组合视为一个二进制序列,如果所有4个都存在,则得到1111,如果缺少第一个字母,则得到0111,依此类推。对于n个字母,我们将得到2 ^ n -