get模块路径不是java中的根路径

edqdpe6u  于 2021-07-15  发布在  Java
关注(0)|答案(2)|浏览(347)

我有一个多模块java(spring)项目,它是由gradle6.7.1构建的。我用喷气式飞机的想法来发展。文件结构如下:

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()
js81xvg6

js81xvg61#

例如,假设您的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

bz4sfanl

bz4sfanl2#

基于@toyonos的答案。我们可以这样做: settings.gradle 获取每个模块的项目路径。
将键值写入 info.properties 在每个模块中。
spring项目读取此属性文件。

代码

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

相关问题