我创建了一个名为foo的Maven插件,需要一个JAR文件,比如xyz.jar才能编译和运行。在插件项目foo的pom文件中,我在依赖项部分中提供了xyz.jar和提供的范围。我不想在插件中打包xyz.jar文件。
插件foo将在其安装阶段由另一个项目说bar触发。所以我在项目栏的<build><plugins><plugin>...</plugin></plugins></build>
部分添加了插件foo。项目栏在其<dependencies>
部分中具有xyz.jar的依赖关系。当我运行安装目标时,xyz.jar中存在的类以及插件foo引用的类在运行时抛出ClassNotFoundException
。
我该如何解决这个问题?
答案 0 :(得分:0)
每个插件和Maven项目都有分离的类加载器,这就是它无法正常工作的原因。通常,插件不应该依赖于项目的依赖性。因此删除提供的范围将解决它。操作类加载器非常棘手。
我不想在插件中打包xyz.jar文件。
嗯,事实并非如此。这只是一个参考。
我无法分辨你的插件是做什么的。我建议看一下Apache Maven或Codehaus Mojo的插件,看看它是如何完成的。
答案 1 :(得分:0)
项目和插件依赖项在Maven中分开。如果您的插件需要一些外部jars
,则需要在插件标记中的<dependencies>
部分提供这些内容(不与您的项目依赖项一起)。例如:
<build>
<plugins>
<plugin>
<groupId>...</groupId>
<artifactId>yourPluginArtifactId</artifactId>
<version>...</version>
<dependencies>
<dependency>
<groupId>...</groupId>
<artifactId>xyz</artifactId>
<version>...</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>