在Gradle中如何使用位于项目外相对路径的源代码?

8

我有两个项目相邻地放置在同一文件夹中,我想将非 Gradle 项目的特定源代码包含到这个项目中,结构如下。

rootfolder/
  my-gradle-project/
    src/main/java
    build.gradle

  my-non-gradle-project/
    src/main/java/com/example/utils

在build.gradle中,为什么以下内容不能正常工作?我有什么替代方案?
另外,我需要从非Gradle项目中包含特定的Java源代码。
build.gradle
sourceSets.main.java.srcDirs = [
          'src/main/java', 
           '../my-non-gradle-project/src/main/java/com/example/util')]

发现实际上它运行良好,只是包混乱了。com/example/util 中的源文件似乎在默认包中。因此,现在问题归结为另一半问题,即如何在不弄乱包的情况下包含特定的源文件。 - bhantol
你要使用'../my-non-gradle-project/src/main/java'作为你的第二个路径吗? - RaGe
src/main/java 的问题在于它会包含所有的源代码。而我只需要特定的路径。这是一个奇怪的项目,否则我可以控制得更多。 - bhantol
1
为了正确获取包,您必须使用src路径。看起来SourceDirectorySet需要包含和排除过滤器 https://docs.gradle.org/current/javadoc/org/gradle/api/file/SourceDirectorySet.html。过滤器可能适用于您的两个路径,但您可以使用单独的sourceSets来规避这种情况。 - RaGe
分离sourceSets似乎是最好的选择。 - bhantol
1个回答

2
以下内容在IntelliJ中有效:

...
group 'org.example'
version '1.0-SNAPSHOT'

sourceSets {
    main {
        java{
            srcDirs '../my-non-gradle-project/src/main/java/com/example/util' /* include proto files from base project level */
        }
    }
}

sourceCompatibility = 1.11
...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接