5

我目前在将 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 文件夹(项目视图)中,我能够查看 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)

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

4

4 回答 4

2

对于系统范围:

Maven 文档说:

系统

此范围类似于提供的范围,只是您必须提供明确包含它的 JAR。工件始终可用,不会在存储库中查找。

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

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

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

于 2012-06-21T15:46:19.640 回答
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 文件,然后使用相同的命名约定将其复制到本地存储库中。这不是可能的最佳解决方案,但效果很好。

于 2012-06-22T15:11:23.880 回答
0

NetBeans 应用程序运行程序似乎不够聪明,无法将此 JAR 文件放在执行类路径中。

为什么不将此依赖项的 JAR 和 POM 文件添加到本地存储库?然后,您可以使用常规依赖项。

或者,看看是否有一种方法可以调整此应用程序的 NetBeans 应用程序启动器的运行时类路径。(我不确定我在这里使用了正确的术语……我是 Eclipse 人。)

于 2012-06-21T15:47:26.727 回答
0

尽量避免系统范围并使用中提到的解决方法

http://eureka.ykyuen.info/2014/06/10/maven-include-system-scope-dependency-in-maven-assembly-plugin/

于 2015-01-17T15:59:24.330 回答