在gradle中如何使用来自项目外部相对路径的源

Posted

技术标签:

【中文标题】在gradle中如何使用来自项目外部相对路径的源【英文标题】:In gradle how to use sources from relative path outside of project 【发布时间】:2017-05-02 14:24:20 【问题描述】:

我有以下 2 个项目彼此相邻放置在某个文件夹中,我想将来自非 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 中的源显示为默认包。所以这现在归结为问题的另一半——如何在不混乱的情况下包含特定的源。 使用'../my-non-gradle-project/src/main/java' 作为您的第二条路径? src/main/java 的问题是它将包括所有来源。我只想要特定的路径。这是一个我无法控制的奇怪项目,否则本可以做得更多。 要获得正确的包,您必须使用src 路径。看起来 SourceDirectorySet 包含和排除过滤器docs.gradle.org/current/javadoc/org/gradle/api/file/…。过滤器可能适用于您的两条路径,您可以使用单独的源集来规避。 单独的 sourceSets 似乎是一个最佳选择。 【参考方案1】:

以下在 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
...

【讨论】:

是的,单独的 sourceSets 是关键。我可以,除非您可以详细说明有关场景的答案而不是原型

以上是关于在gradle中如何使用来自项目外部相对路径的源的主要内容,如果未能解决你的问题,请参考以下文章

数据库项目 - “无法解析对来自名为 x 的源的外部元素的引用

如何在不使用 Gradle 复制 jar 的情况下将一个模块的源包含在另一个模块中?

Vue项目打包后的资源引用如何使用相对路径

保持来自外部存储库的源是最新的

Gradle:如何将带有子路径的 sourceControl 定义为依赖项?

设置全局 gradle build dir 相对路径