составление вложенных банок с помощью муравья - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть проект Java, Parent, который зависит от подпроекта Child (в форме JAR). Это Child зависит от библиотек A и B, и те, которые связаны с Child. Parent также использует A и B (имеется в виду прямые вызовы, а не косвенные через Child. Я хочу иметь возможность включать A и B JAR только один раз в мой проект.

Когда я компилирую Parent, я получаю cannot find symbol, когда он ссылается на библиотеки A и B. Я полагаю, что это потому, что Child находится на пути времени компиляции, но по некоторым причинам библиотеки в нем нет.

Я использую муравей в качестве инструмента для сборки - есть ли что-то особенное, что я должен делать в моих тегах javac для вложенных банок? Прямо сейчас в Parent build.xml у меня есть:

<target name="compile" depends="clean, makedir">
    <javac 
        srcdir="${src.dir}"
        destdir="${build.dir}"
        includeantruntime="false"
        classpathref="build.classpath">
    </javac>
</target>

<path id="build.classpath">
    <fileset dir="${lib.dir}">
        <include name="**/*.jar" />
    </fileset>
</path>

Это должно включать все jar-файлы, присутствующие в моей папке lib, но, похоже, не включает все jar-файлы внутри jar-файлов.

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Я предполагаю, что A.jar и B.jar являются сторонними библиотеками, а не выходами вашей собственной сборки.

В этом случае одним из способов решения этой проблемы будет создание проекта или каталога для сторонних библиотек, которые затем могут использоваться несколькими проектами. В среде, которую вы описали, ваш проект Child объединит их в свои выходные данные сборки, а проект Parent будет использовать их непосредственно в своем пути к классам.

Допустим, вы создаете thirdparty проект на том же уровне в файловой системе, что и другие ваши проекты:

  thirdparty
    lib
      A.jar
      B.jar
  Parent
    build.xml
    src
  Child
    build.xml
    src

В ваших файлах сборки вы можете указать расположение стороннего проекта:

<property name="thirdparty" value="../thirdparty"/>

и ссылаться на него в путях:

<include name="${thirdparty}/lib/A.jar"/>
<include name="${thirdparty}/lib/B.jar"/>
0 голосов
/ 02 декабря 2011

Моя проблема возникла из-за того, что Java не может ссылаться на jar-файлы внутри jar-файлов. Вам нужно будет использовать что-то вроде http://one -jar.sourceforge.net / , чтобы обойти это.

...