我正在使用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>
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)
任何帮助或指示将不胜感激!
答案 0 :(得分:2)
对于系统范围:
系统
此范围与您提供的内容类似 提供明确包含它的JAR。工件总是如此 可用,不会在存储库中查找。
您的IDE以某种方式提供了jar。但是当运行时,需要提供它。
尝试使用默认范围(根本没有范围标记)。
编辑: 如果希望maven保留系统范围,则需要通过类路径提供jar运行时。
答案 1 :(得分:0)
似乎NetBeans应用程序运行器不够智能,无法将此JAR文件放在执行类路径上。
为什么不将此依赖项的JAR和POM文件添加到本地存储库?然后你可以使用常规依赖。
或者,查看是否有一种方法可以为此应用程序调整NetBeans应用程序启动器的运行时类路径。 (我不确定我在这里使用正确的术语......我是一个Eclipse人。)
答案 2 :(得分:0)
我通过为项目创建以下build.xml解决了这个问题:
<!-- make the repo dir -->
<mkdir dir="${m2.home}" />
<!-- copy libs -->
<copy todir="${m2.home}">
<fileset dir="dist"/>
</copy>
<!-- copy pom -->
<copy todir="${m2.home}">
<fileset dir="pom"/>
<mapper>
<mapper type="regexp"
from="pom.xml" to="${m2.app.name}-${m2.app.ver}.pom" />
</mapper>
</copy>
<!-- use naming policy -->
<copy todir="${m2.home}">
<fileset dir="dist"/>
<mapper>
<mapper type="regexp"
from="${m2.app.name}.jar" to="${m2.app.name}-${m2.app.ver}.jar" />
</mapper>
</copy>
<!-- remove unnecessiary files -->
<delete>
<fileset dir="${m2.home}">
<include name="${m2.app.name}.jar"/>
<include name="README.TXT"/>
</fileset>
</delete>
</target>
我还必须为项目手动创建一个pom.xml文件,我使用相同的命名约定将其复制到本地存储库。这不是最好的解决方案,但效果还不错。
答案 3 :(得分:0)