在 Java 中获取模块路径而不是根路径

时间:2021-03-25 08:33:52

标签: java spring gradle intellij-idea groovy

我有一个由 Gradle 6.7.1 构建的多模块 Java(Spring) 项目。而我在Jetbrain IDEA中使用开发。文件结构如下:

root
  |--orm
  |   +---hibernates
  |
  |--web
      |--mvc
      |--rest

然后,我在我的模块项目中尝试了一些代码,如下所示,我得到的都是根路径(/home/user/IdeaProjects/root/),而不是模块路径(/home/user/IdeaProjects/root/web/mvc)。如何获取模块路径 (/home/user/IdeaProjects/root/web/mvc) ?

new File("").getAbsolutePath()

2 个答案:

答案 0 :(得分:1)

例如,假设您的 mvc 项目在根文件夹中的 setting.gradle 中设置如下:

include 'mvc'
project(':mvc').projectDir = new File('./web/mvc')

然后,要获取路径 /home/user/IdeaProjects/root/web/mvc,请尝试以下操作:

println project(':mvc').projectDir

将打印:

<块引用>

/home/user/IdeaProjects/root/web/mvc

答案 1 :(得分:0)

基于@ToYonos 的回答。我们可以这样做:

  1. settings.gradle 获取每个模块的项目路径。
  2. 在每个模块的 info.properties 中写入一个键值。
  3. Spring Project 读取了这个属性文件。

代码

Because struct of my project is:
root
  |--orm
  |   +---mybatis
  |   +---jpa
  |   +---...
  |--web
      +--mvc
      +--rest
      +--...

所以,我应该循环两次以获取模块名称。我排除了没有 build.gradle 的项目。

file("${rootDir}").eachDir {
    it.eachDirMatch(~/.*/) {
        if (it.list().contains("build.gradle")) {
            def moduleName = "${it.parentFile.name}:${it.name}"
            println "   ${moduleName}"
            include moduleName
}}}

然后,读写info.properties

import java.nio.file.Paths

// read
def project_dir = project(":${moduleName}").projectDir
def propFile = Paths.get("${project_dir}", "src", "main","resources","info.properties").toFile()
propFile.createNewFile()
Properties props = new Properties()
propFile.withInputStream {
    props.load(it)
}

// write
props.setProperty("project.dir","$project_dir")
props.store propFile.newWriter(), null