У меня есть файл Ant build.xml
, который отлично работает в командной строке: он компилирует, строит JAR, и я могу просто выполнить основной метод из JAR. Файл build.xml
ссылается на несколько библиотек третьих сторон, которые разбросаны здесь и там. При создании JAR скрипт не включает все библиотеки сторонних сторон в JAR. Вместо этого он ставит свой путь в манифест JAR. Это помогает держать мой JAR стройным и аккуратным.Использование пути класса Ant в Eclipse
Я хотел бы иметь возможность редактировать и отлаживать проект в Eclipse, но я не могу найти простой способ сделать это. Я могу использовать мой проект в файле Ant для создания проекта, и, похоже, он работает. Тем не менее, Eclipse испытывает трудности с поиском ThirdParty найти библиотеки, и, таким образом, Затмение имеет две проблемы:
- он показывает (в текстовом редакторе) много ошибок компиляции, потому что много классов не определены, и
- он не может выполнить JAR.
я могу решить обе вышеуказанные проблемы, указав вручную, в двух местах разница (то есть, путь сборки через Properties->Java Build Path->Libraries
и исполнение через Run Configurations->Classpath
путь к классам), все сторонние библиотеки. Но мне кажется, что мне не нужно делать это вручную, так как все сторонние библиотеки уже перечислены в манифесте JAR. Что я делаю не так?
Вот мой build.xml
файл:
<!-- Set global properties for this build -->
<property name="src" location="./src" />
<property name="build" location="./build"/>
<property name="dist" location="./dist"/>
<property name="logs" location="./logs"/>
<property name="docs" location="./docs"/>
<property name="jar" location="${dist}/dynamic_analyzer.jar"/>
<property name="lib" location="../../thirdparty/lib"/>
<property name="hive-util" location="../../hive-utils/dist"/>
<property name="hpdb" location="../../hive-db/hpdb/dist"/>
<property name="static" location="../../hive-backend/static_analyzer/dist"/>
<property name="mainclass" value="com.datawarellc.main.DynamicMain"/>
<path id="dep.runtime">
<fileset dir="${lib}" includes="**/*.jar"/>
<fileset dir="${hive-util}" includes="**/*.jar"/>
<fileset dir="${hpdb}" includes="**/*.jar"/>
<fileset dir="${static}" includes="**/*.jar"/>
</path>
<target name="clean">
<delete dir="${build}"/>
<delete dir="${dist}"/>
<delete dir="${docs}"/>
<delete dir="${logs}"/>
</target>
<target name="init">
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${logs}"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${build}" debug="on" includeantruntime="false">
<classpath refid="dep.runtime" />
</javac>
<!-- Debug output of classpath -->
<property name="myclasspath" refid="dep.runtime"/>
<echo message="Classpath = ${myclasspath}"/>
</target>
<target name="jar" depends="compile">
<!-- Put the classpath in the manifest -->
<manifestclasspath property="manifest_cp" jarfile="${jar}" maxParentLevels="10">
<classpath refid="dep.runtime" />
</manifestclasspath>
<jar jarfile="${jar}" basedir="${build}">
<manifest>
<attribute name="Main-Class" value="${mainclass}"/>
<attribute name="Class-Path" value="${manifest_cp}"/>
</manifest>
<zipfileset dir="${src}" includes="**/*.xml" />
</jar>
</target>
Вы можете видеть, что у меня есть сторонние библиотеки в нескольких каталогах (${lib}
, ${hive-util}
, ${hpdb}
и ${static}
). Я использую их для создания path
под названием dep.runtime
. Затем я включаю dep.runtime
в манифест при создании моей банки. Как я могу заставить Eclipse использовать тот же самый dep.runtime
для пути сборки и пути к классам при выполнении?
Проверьте документацию здесь: http://help.eclipse.org/juno/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences% 2Fjava% 2Fbuildpath% 2Fref-preferences-user-libraries.htm (я бы ответил на этот вопрос, но у меня нет установки Eclipse) – leeand00
@ leeand00 Я не вижу, как эта документация мне помогает. Меню, о котором говорит ссылка, - это именно то меню, которое я использую, чтобы вручную добавить все сторонние библиотеки (как временное обходное решение), но именно этого я и стараюсь избежать. – stepthom
Должна быть кнопка, которая говорит 'add directory' или' add classpath' там, и это должно сделать трюк ... дайте мне знать, если это не так. – leeand00