Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在gradle生成的测试类路径中找不到生成的资源输出_Java_Gradle_Protocol Buffers - Fatal编程技术网

Java 在gradle生成的测试类路径中找不到生成的资源输出

Java 在gradle生成的测试类路径中找不到生成的资源输出,java,gradle,protocol-buffers,Java,Gradle,Protocol Buffers,我试图配置一个gradle(版本4.6)构建(作为多模块项目的一部分),该构建使用Java“脚本”将资源生成到主源集中,然后在测试配置中引用这些资源。我的想法是,我最终希望创建一个jar,它只是一个资源包,包含在我构建的另一个模块中,但是我有java文件来生成这些资源,并在打包之前对它们执行验证测试 我目前配置了三个源集:标准的“main”和“test”,以及一个定制的源集“generator”,其中保存了用作generator“script”输入的资源以及generator脚本本身的源。我已经

我试图配置一个gradle(版本4.6)构建(作为多模块项目的一部分),该构建使用Java“脚本”将资源生成到主源集中,然后在测试配置中引用这些资源。我的想法是,我最终希望创建一个jar,它只是一个资源包,包含在我构建的另一个模块中,但是我有java文件来生成这些资源,并在打包之前对它们执行验证测试

我目前配置了三个源集:标准的“main”和“test”,以及一个定制的源集“generator”,其中保存了用作generator“script”输入的资源以及generator脚本本身的源。我已经根据文档注册了一个主输出目录(请参阅“使用生成的资源”),指向一个JavaExec类,该类使用“generator”sourceSet运行时类路径运行生成器,以将资源输出到主类路径

所有这些似乎都起作用了-我可以在运行
::build
时在正确的目录中找到输出,这表明脚本运行正常,并且作为主编译任务的依赖项完成。但是,当我尝试使用
getClass().getClassLoader().getResource(“”
)引用测试中生成的输出时,我得到了一个空值,这表明生成的输出未包含在测试运行时类路径中。文件中明确指出

Java插件将使用这些目录来计算类路径和对内容进行抖动

…所以我不知道为什么我的文件没有被提取。下面是我的build.gradle文件摘要。请注意,我正在重写生成器任务类型,以便使用构建缓存进行设置,但在关闭缓存的情况下仍会看到此错误

apply plugin: 'java-library'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

sourceSets {
    generator {
        java.srcDirs = ['src/generator/java']
        resources.srcDirs = ['src/generator/resources']
    }
    main {
        java
        resources
        output.dir("$buildDir/generated-files/main", builtBy: 'generateConfig')
    }
    test {
        java
        resources
    }
}

dependencies {
    api project(':server:server_protobuf_classes');
    api project(':common:game-config-util')
    api 'com.google.protobuf:protobuf-java:3.5.1'

    generatorImplementation project(':common:game-config-util')
    generatorImplementation project(':server:server_protobuf_classes');
    generatorImplementation group: 'commons-io', name: 'commons-io', version: '2.5'
    // ...

    testCompile group: 'junit', name: 'junit', version: '4.11'
    testCompile group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3'
    testCompile group: 'commons-collections', name: 'commons-collections', version: '3.2.2'
    // ...
}

task generateConfig(type: GenerateConfig) {
    outputs.dir("$buildDir/generated-files/main")

    classpath sourceSets.generator.runtimeClasspath
    main = "com.project.ProtobufConfigurationProcessor"
}

@CacheableTask
class GenerateConfig extends JavaExec {
}
编辑:添加以下内容会使测试通过,但我不明白为什么需要像这样手动配置测试资源目录。默认情况下,测试任务不应该从主源集合获取构建输出吗

sourceSets {
    test {
        resources.srcDirs = ["$buildDir/generated-files/main"]
    }
}