使用系统范围时的NoClassDefFoundError

krs*_*ynx 5 java maven

我目前在使用Maven和NetBeans 7.1时遇到问题 - 我已经包含了一个我无法放入系统范围内的Maven存储库的库.它看起来像下面这样:

 <dependency>
    <groupId>org.company</groupId>
    <artifactId>FBTM</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/lib/FBTM-1.0-SNAPSHOT.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)

IDE似乎很好地接受了这个依赖,就像在Dependencies文件夹(Project视图)中显示的那样,我能够查看jar内容.我也可以从jar中导入类而没有任何问题.

但是,当我尝试运行我的项目(并且运行时有任何正在使用的类)时,我得到了一个有NoClassDefFoundError问题的类.它可以是任何类.

堆栈跟踪:

Exception in thread "main" java.lang.NoClassDefFoundError: com/company/otaupdate/sim/commands/Select at com.company.fbtranslationlibrary.mc.scripts.UserData$1.<init>(UserData.java:30) at com.company.fbtranslationlibrary.mc.scripts.UserData.<init>(UserData.java:28) at com.company.fbtranslationlibrary.mc.MS.get_profile_script(MuscadeScript.java:80) at com.company.fbtranslationlibrary.mc.MS.access$300(MS.java:16)

任何帮助或指针将不胜感激!

ese*_*sej 2

对于系统范围:

Maven 文档说:

系统

此范围与提供的范围类似,只是您必须显式提供包含它的 JAR。该工件始终可用,并且不会在存储库中查找。

您的 IDE 以某种方式提供了该 jar。但运行时需要提供它。

尝试使用默认范围(根本没有范围标签)。

编辑:如果您希望 Maven 保留系统范围,您需要通过类路径提供 jar 运行时。

  • 不使用范围标记会导致 systemPath 标记无效。 (4认同)