5

現在、NetBeans 7.1 で Maven を使用しているときに問題に直面しています - System スコープの Maven リポジトリに配置できない lib を含めました。次のようになります。

 <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 はこの依存関係を適切に取得しているようで、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 Docは次のように述べています。

システム

このスコープは、それを明示的に含む JAR を提供する必要があることを除いて、提供されたものと似ています。アーティファクトは常に利用可能で、リポジトリで検索されません。

IDE は何らかの方法で jar を提供します。しかし、実行するときはそれを提供する必要があります。

デフォルトのスコープで試してください (つまり、スコープ タグがまったくありません)。

編集: Maven にシステム スコープを保持させたい場合は、クラスパスを介して jar ランタイムを提供する必要があります。

于 2012-06-21T15:46:19.640 に答える
0

システム スコープを回避し、に記載されている回避策を使用してください。

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

于 2015-01-17T15:59:24.330 に答える
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 に答える