将任意目录分配给Maven / Gradle中的包

时间:2019-03-15 09:07:50

标签: maven gradle intellij-idea build

我正在研究结构异常的项目。它不是由构建系统构建的,而是由IntelliJ IDEA IDE构建的。我知道,这种方法通常很差而且很脆弱。但是我必须忍受那个。

IDEA的主要功能是可以将任意软件包分配给目录。我正在从事的项目在很大程度上依赖此功能(该项目非常复杂且古老)。

我创建了简化的项目只是为了说明。例如,可以保留两个属于reports包的目录databasecom.mycompany.internal并将com.mycompany.external包分配给rest目录:

Project structure in IDEA

在磁盘上的结构如下:

└───src
    ├───database
    ├───reports
    └───rest

据我所知,Maven和Gradle之类的构建系统可以处理多个源根。例如,在Gradle中可以指定多个目录:

sourceSets {
    main {
        java {
            srcDirs 'src'
            srcDirs 'src1'
            srcDirs 'src2'
        }
    }
 }

但是在src内部,Gradle需要以下层次结构(根据Java软件包):

└───src
    └───com
        └───mycompany
            ├───internal
            └───external

似乎没有办法立即改变Maven / Gradle的这种行为...嗯,我可以使用Ant作为替代方法(它非常灵活),但是这种方法将非常必要和繁琐。还是我需要为Maven / Gradle编写新的插件来生成IDEA项目文件?

1 个答案:

答案 0 :(得分:2)

Java编译器实际上并不关心源位于与它们的程序包名称匹配的文件夹中。

因此,您在Gradle中唯一需要做的就是正确地配置源目录,例如:

sourceSets {
    main {
        java {
            srcDirs "src/database", "src/reports", "src/rest"
        }
    }
}

然后按照IntelliJ documentation进行导入。