java - 如何定义自定义源集而不在 Gradle 中显式定义它的路径?

标签 java gradle

手册里写的:

enter image description here

src/sourceSet/java 是“给定源集的 Java 源”的默认路径。

如何使用它?假设我希望创建源代码集 demo

我可以写吗

sourceSets {
    demo {
        java {
            srcDir 'src/demo/java'
        }
        resources {
            srcDir 'src/demo/resources'
        }
    }
}

我可以在没有显式路径的情况下以某种方式编写吗?

我可能不需要写任何东西,只需将文件放入 demo 子文件夹即可吗?

更新

我测试过

sourceSets {
    demo {
        java {
            srcDir 'src/demo/java'
        }
        resources {
            srcDir 'src/demo/resources'
        }
    }
}

sourceSets {
    demo {
        java
        resources
    }
}

sourceSets {
    demo
}

在所有情况下,运行 gradle build 都不会编译源代码。

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 {
        java {
            srcDir 'src/demo/java'
        }
        resources {
            srcDir 'src/demo/resources'
        }
    }
}

示例项目:https://github.com/dims12/MultipleSourceRoots

最佳答案

Gradle 默认任务不会构建非默认源集,除非在主链中明确依赖它们。为了编译您的 demo 类,您必须按照 cricket_007 的回答调用 gradle demoClasses - 或者更好的是,只需执行 gradle build demo这也会将生成的类放入目标 jar 中。

你只需要这个:

sourceSets {
    demo
}

...并且 build demo 任务确实会按预期创建任何缺失的目录,除非您有一些奇怪的有效权限方案。

现在我查看了您的 git 项目,您的演示源集似乎依赖于主要类。您需要明确此依赖项(即将它们添加到 demo 类路径)以避免编译错误:

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

关于java - 如何定义自定义源集而不在 Gradle 中显式定义它的路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36421798/

相关文章:

java - 无法解决java.lang.NullPointerException

java - 创建一个 SortedSet(对象)并向其插入元素或创建一个 ArrayList 并在之后对其进行排序是否更快?

java - PowerMockito whenNew 返回 null

android - android dexDebug或dexRelease任务后如何执行gradle任务

android - ionic cordova android构建失败,通过说 “Gradle build daemon got exited”在大厅ci

Android Studio list 合并失败

java - 如何使用登录组件安排程序流程

java - 为什么一个<Integer> ArrayList加了一个字符串变量就编译成功了?

android - 尝试将 Android Gradle 项目从 Groovy 迁移到 Kotlin 时出现 CacheOpenException

java - 升级到 gradle 4.x 后 - 无法解决 JEE 项目的警告