我在项目和自定义maven插件中有很长的依赖项列表。 我希望避免重复这些依赖项,并从插件的默认类加载器中开箱即用。
我发现了类似的question asked on SO,但它并没有解决我的问题。
我发现@Mojo的属性完全符合我的要求
requiresDependencyResolution = COMPILE
但它有一个问题。它没有用。
getClass().getResourceAsStream("/file.json")
如果插件的依赖项列表为空,则上面的行返回null,而项目具有依赖项。
我有一个硬代码解决方法:
IOUtil.toString(new URLClassLoader(new URL[] {
getProject().getDependencyArtifacts().stream()
.findFirst().get().getFile().toURI().toURL() },
Thread.currentThread().getContextClassLoader() ).getResourceAsStream("file.json"))
我觉得有一些技巧我不知道。 我的目标:
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.4</version>
<configuration>
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
</configuration>
<executions>
<execution>
<id>mojo-descriptor</id>
<goals>
<goal>descriptor</goal>
</goals>
</execution>
<execution>
<id>help-goal</id>
<goals>
<goal>helpmojo</goal>
</goals>
</execution>
</executions>
</plugin>
我无法解释的一个观察结果:
在第一种情况下,getResourceAsStream仅在路径前缀为&#34; /&#34; 在第二种情况下,getResourceAsStream仅在没有&#34; /&#34;的路径时有效。