我有一个项目,其中包括Apache Pivot和Neo4j。我的项目编译并运行。当我尝试添加Neo4j / Spatial时:
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-spatial</artifactId>
<version>0.11-SNAPSHOT</version>
</dependency>
项目编译但不会运行。编译器在其中一个BXML文件中输出错误:
org.apache.pivot.serialization.SerializationException: java.util.ServiceConfigurationError: javax.imageio.spi.ImageOutputStreamSpi: Provider com.sun.media.imageioimpl.stream.ChannelImageOutputStreamSpi could not be instantiated: java.lang.IllegalArgumentException: vendorName == null!
我无法理解添加依赖项如何在运行时破坏项目。我没有更改任何代码。我会按照要求发布任何必要的代码。
更新:我尝试过以前的稳定版本,结果相同。此外,我已将“供应商”和版本信息添加到我的jar清单中,似乎修复了vendorName == null错误并导致项目挂起而不是打开。但我的问题,我将在此重述,是一样的。
如何在不更改代码的情况下添加依赖项,导致正常运行的项目在运行时失败?我不明白如果我不调用它,添加依赖项会如何改变执行。
答案 0 :(得分:0)
版本控制可能存在问题。如果你添加了一个依赖项,并且你有另一个具有相同依赖但是版本不同的库,那么Maven的通常行为是导入最新版本,偶尔也会破坏依赖于旧版本的代码。改变界面或其他什么。
因此,如果A依赖于B v1,并且C依赖于Bv2,那么当你添加C时,它会在有效POM中用Bv2覆盖Bv1,理论上它可能会破坏它。
我确信有一种解决方法,但我不是Maven的专家。因此,在导入新内容时,请检查有效的POM是否有版本更改。