Java 在使用具有插件的模块构建项目时,maven插件代码未找到资源

Java 在使用具有插件的模块构建项目时,maven插件代码未找到资源,java,maven,module,classpath,Java,Maven,Module,Classpath,我有一个Maven项目MyProject,在它的pom中有几个其他项目被定义为模块 其中一个模块称为MyPluginProject,它包含自定义maven插件的代码和定义。该插件需要在另一个名为MyUtilityProject的模块中使用实用程序类Utils搜索资源文件 Utils类(其方法)首先尝试使用Thread.currentThread().getContextClassLoader().getResourceAsStream(资源)在类路径上查找文件,如果没有结果,则尝试新的FileI

我有一个Maven项目MyProject,在它的pom中有几个其他项目被定义为模块

其中一个模块称为MyPluginProject,它包含自定义maven插件的代码和定义。该插件需要在另一个名为MyUtilityProject的模块中使用实用程序类Utils搜索资源文件

Utils类(其方法)首先尝试使用Thread.currentThread().getContextClassLoader().getResourceAsStream(资源)在类路径上查找文件,如果没有结果,则尝试新的FileInputStream(资源)。如果仍然找不到,将引发运行时异常

第三个模块称为MyTestProject,它在pom中引用了自定义插件(在build/plugins/plugin中定义)

1) 在MyTestProject上执行mvn clean安装时,插件将被执行,并且它具有实用程序方法搜索MyTestProject根目录中的资源“myFile.txt”。类路径尝试getResourceAsStream找不到该文件,但FileInputStream找到了。构建成功,一切正常

2) 在整个项目MyProject上执行mvn clean安装时,找不到文件(仍然在MyTestProject的根目录中)。生成失败,因为引发了运行时异常

但是,当我将文件定义为“MyTestProject/myFile.txt”时,会发现它,但我不希望这样

在这两种情况下,如何在模块MyTestProject的根目录中完成文件“myFile.txt”?可能是通过确保类装入器具有正确的类路径?但如何做到这一点呢

编辑1: 这些模块也物理嵌套在主项目中。这就是结构:

MyProject
|-MyPluginProject (contains the plugin definition in pom + code)
|-MyUtilityProject (does the resource lookup)
|-MyTestProject (simulates usage of the plugin in MyPluginProject)
     |-myFile.txt
编辑2: 我确实发现,在构建父MyProject时,类路径包含指向Eclipse项目目标位置MyPluginProject和MyUtilityProject中JAR的完整绝对路径

但是,在构建子MyTestProject时,类路径包含本地Maven存储库中这些项目的JAR的完整绝对路径,而不是Eclipse工作区位置中的JAR


两个类路径都缺少MyTestProject jar。我在Eclipse之外使用mvn

插件是在哪里定义的?在两个POM中(模块和父级)?您是否在父pom中定义了子模块,在子模块中定义了父标记?所有提到的模块都将父标记设置为父项目。在父项目中,所有模块都列为“模块”。父项目没有maven插件的定义(为什么这是必要的?插件已经执行,它只是找不到te资源)。插件是在哪里定义的?在两个POM中(模块和父级)?您是否在父pom中定义了子模块,在子模块中定义了父标记?所有提到的模块都将父标记设置为父项目。在父项目中,所有模块都列为“模块”。父项目没有定义maven插件(为什么这是必要的?插件已经执行,它只是找不到te资源)。