【问题标题】:How to control resources processing while Java build?Java构建时如何控制资源处理?
【发布时间】:2016-06-10 12:32:09
【问题描述】:

谁方便,将源集中resources子目录中的任何文件复制到构建目录的资源文件夹中?

我在 IntelliJ 中创建了简单的 Gradle 项目,并配置了名为 demo 的附加源根目录:

build.gradle 如下:

group 'net.inthemoon.tests'
version '1.0-SNAPSHOT'

apply plugin: 'java'

sourceCompatibility = 1.5

repositories {
    mavenCentral()
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.11'
}

sourceSets {
    demo
}

然后我将简单的文本文件放入两组的rerources 目录中。

之后我注意到,仅当我从 IntelliJ 运行构建时,才会出现该突出显示的文件(来自 demo 源集的一个)。如果我从 Gradle 运行 build 目标,则只会出现第二个文件(来自 main 源集)。

如何配置 gradle 来处理来自所有源集的所有文件?

【问题讨论】:

    标签: java intellij-idea gradle build


    【解决方案1】:

    我不使用 intellij,所以我无法告诉您为什么它会自动执行 demoClasses 来编译和复制演示 sourceSet,但您可以执行它并会看到 intellij 会执行的资源。

    添加

    build.dependsOn demoClasses
    

    它会在每次构建时执行此操作。要将它们添加到您的 jar 中,您必须将其添加为源代码,如

    jar {
        from sourceSets.demo.output
    }
    

    对于依赖于 main 的源集,只需添加它的输出

    sourceSets {
        demo {
            compileClasspath += sourceSets.main.output
            runtimeClasspath += sourceSets.main.output
        }
    }
    

    如果你还需要它的编译/运行库来进行演示编译,就这样做

    sourceSets {
        demo {
            compileClasspath += sourceSets.main.runtimeClasspath
            runtimeClasspath += sourceSets.main.runtimeClasspath
        }
    }
    

    【讨论】:

    • 添加这些行后,我收到很多关于找不到符号和包的错误,好像演示源集不知道主源集中的类。
    • 是的,没错。我根据您的需要添加了配置,但已经有几个关于该主题的示例如何添加它们,请参阅stackoverflow.com/questions/11581419/…
    猜你喜欢
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-11
    • 2011-05-05
    相关资源
    最近更新 更多