7

Java プロジェクトに外部 jar を含めたい。私はアリを使っています。外部 .jar はフォルダ lib にあります。私のbuild.xmlは次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <path id="classpath">
        <fileset dir="lib" includes="**/*.jar"/>
    </path>

    <target name="clean">
        <delete dir="build"/>
    </target>

    <target name="compile">
        <mkdir dir="build"/>
        <javac srcdir="src" destdir="build" classpathref="classpath" />
    </target>

    <target name="jar">
        <mkdir dir="trash"/>
        <jar destfile="trash/test.jar" basedir="build">
            <zipgroupfileset dir="lib" includes="**/*.jar"/>
            <manifest>
                <attribute name="Main-Class" value="com.Test"/>
            </manifest>
        </jar>
    </target>

    <target name="run">
        <java jar="trash/test.jar" fork="true"/>
    </target>
</project>

しかし、うまくいきません。外部の .jar から何かをインポートしたい場合、コマンドの後にエラーがありますant compile: package com.something does not exist..何を編集すれば機能しますか?

正確なエラー:

  Compiling 23 source files to xy/build
  xy/src/com/Test.java:5: package com.thoughtworks.xstream does not exist
  import com.thoughtworks.xstream.*;
  ^
  1 error
4

4 に答える 4

4

include属性なしで試してください。

<fileset dir="lib" />

そして、jar部分には、次のようなクラスを含めます。

<zipgroupfileset includes="*.jar" dir="lib"/>
于 2012-04-15T18:37:14.527 に答える
1

外部ライブラリを jar に入れて、クラスローダーがそれらの jar を使用することを期待することはできません。残念ながら、これはサポートされていません。

必要なものがすべて含まれている jar ファイルを作成するのに役立つ1 つの jarのような ant タスクがあります。

このビットは、1 つの jar の背景情報からのものです。

残念ながら、これは機能しません。Java Launcher$AppClassLoader は、この種の Class-Path を持つ Jar 内の Jar からクラスをロードする方法を知りません。jar:file:jarname.jar!/commons-logging.jar を使用しようとすると、行き止まりになります。このアプローチは、サポートする Jar ファイルを jarname.jar ファイルがインストールされているディレクトリにインストール (分散) する場合にのみ機能します。

もう 1 つの方法は、依存するすべての Jar ファイルを解凍し、それらを jarname.jar ファイル内に再パックすることです。このアプローチは脆弱で遅くなる傾向があり、リソースの重複の問題が発生する可能性があります。

その他の代替:

  • jarjar : Jar Jar Links は、Java ライブラリを簡単に再パッケージ化して独自のディストリビューションに埋め込むユーティリティです。
于 2012-04-16T06:16:45.540 に答える
0

場合によっては、jar の内容を直接使用できます。解凍するだけです

        <unzip src="/Developer-Java/mysql-connector-java/mysql-connector-java-5.1.22-bin.jar" dest="${build_dir}" />
于 2013-01-09T07:07:22.897 に答える
0

また、ant を使用して、多くの依存関係 JAR を JAR に含めています。私のコンパイルタスクは次のようになります。おそらく、似たようなことがあなたのために働くでしょう。

<target name="compile" depends="init">
   <javac srcdir="${src}" destdir="${build}" includeantruntime="false">
    <classpath>
      <pathelement path="${classpath}" />
      <fileset dir="${deps}">
         <include name="**/*.jar"/>
      </fileset>
    </classpath>
  </javac>
  <copy todir="${build}">
    <fileset dir="${src}" excludes="**/*.java"/>
  </copy>
</target>
于 2012-04-16T04:01:33.240 に答える