当我尝试使用maven定义的依赖项运行我的应用程序时,我收到ClassNotFoundException
和NoClassDefFoundError
个异常。
我使用以下声明将我对相关jar的maven依赖项添加到我的pom.xml文件中:
<dependency>
<groupId>ldap</groupId>
<artifactId>com.novell.ldap</artifactId>
<systemPath>${local.lib.dir}/ldap.jar</systemPath>
<scope>system</scope>
<version>1</version>
</dependency>
将jar正确添加到Dependencies NetBeans项目
但是当我部署应用程序时,缺少依赖性
java.lang.NoClassDefFoundError: com/novell/ldap/LDAPException
答案 0 :(得分:2)
如果您阅读有关此范围的Maven documentation,如果您的应用程序服务器在运行时未提供此库,则似乎是预期的行为:
此范围类似于提供的,但您必须提供 明确包含它的JAR。
provided
范围说明:
这很像编译,但表示你期望JDK或者 容器在运行时提供依赖。
不建议的解决方案:将此库添加到应用程序服务器的lib文件夹中
更清洁的解决方案:手动或使用mvn install:install-file
在maven存储库中添加此maven依赖项
并删除此依赖项的system
范围。它将使用default
范围。
答案 1 :(得分:1)
maven中的 system 范围有点像提供,即依赖仅在编译时使用。您有责任确保jar在运行时位于类路径中。
此外,系统范围实际上已弃用,请考虑其他替代方案。 见introduction to dependency mechanism
答案 2 :(得分:0)
问题在于你的maven&#39; 系统&#39;范围。 这意味着必须在部署应用程序的应用程序服务器上提供依赖关系(与范围&#39; 提供&#39;相同)。范围&#39; 系统&#39;还要求依赖项必须作为jar文件提供。
我建议删除范围元素。像这样,依赖项将被下载到您的maven存储库中,并且可以在您生成的包文件中找到,该文件可以部署在您的应用程序服务器上。
另一个解决方案是将jar文件放在应用程序服务器的库文件夹中。
这里有关于此问题的maven文档link。