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

时间:2017-06-05 13:50:28

标签: java maven module classpath

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

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

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

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

1)在MyTestProject上执行mvn clean install时,执行插件并使用实用程序方法搜索MyTestProject根目录中的资源“myFile.txt”。类路径尝试getResourceAsStream找不到文件,但FileInputStream没有。构建成功,一切都很好。

2)在整个事物MyProject上执行mvn clean install时,找不到该文件(仍然在MyTestProject的根目录中)。构建失败,因为抛出了运行时异常。

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

如何在两种情况下找到模块MyTestProject的根目录中的'myFile.txt'文件?可能通过确保类加载器具有正确的类路径?但是怎么做呢?

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

\d+[- ]

编辑2: 我确实发现在构建父MyProject时,类路径包含MyPluginProject和MyUtilityProject的Eclipse项目位置目标中jar的完整绝对路径。

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

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

0 个答案:

没有答案