Не могу структурировать файл jar так, как я хочу, с помощью Ant - PullRequest
1 голос
/ 16 марта 2012

Я пытаюсь создать JAR с Ant впервые и столкнулся с некоторыми трудностями.Вот структура каталогов моего проекта:

MyProj/
    src/
        com.me.org
            Fizz
            Buzz
    dist/
        classes/

В моем сборочном скрипте Ant я копирую все мои исходные файлы в папку dist/classes/.Затем я включаю dist/classes в качестве набора файлов в мою задачу JAR следующим образом:

<jar destfile="dist/myProj.jar">
    <manifest>
        <attribute name="Sealed" value="true" />
    </manifest>

    <fileset dir="dist/classes"/>
</jar>

Задача JAR выполняется и создает JAR.Однако когда я помещаю этот JAR-файл в путь сборки другого проекта (Eclipse) и пытаюсь использовать Fizz или Buzz внутри этого другого проекта, Eclipse импортирует их как:

классы импорта.com.me.org.Fizz;

и т. д.Это потому, что Eclipse должен думать, что мой каталог classes/ является пакетом!

Я предполагаю, что я могу кое-что сделать в манифесте, чтобы сказать: " Эй! Корневой пакет classes/com/, а не classes/!", поэтому они будут импортированы как:

import com.me.org.Fizz;

Я прочитал об Ant <manifest> Задача и не мог найти то, что я искал.У кого-нибудь есть идеи, что я могу сделать здесь?

И, если вам интересно , почему Я хочу упаковать их в каталог classes/, тогда я бы сказал, что этопотому что мне нравится идея иметь один каталог внутри JAR, который содержит весь путь к классам.И, особенно, если есть ресурсы пути к классам, отличным от Java (изображения, сценарии, файлы и т. Д.), Вам нужно место, чтобы поместить корень пакета (com/) и эти другие ресурсы в один и тот же родительский каталог.

Первоначально я собирался назвать этот каталог classpath/, но затем я решил использовать то же соглашение, что и спецификация файла WAR, для которого требуется наличие каталога classes/ внутри WAR.

Вот почему.;-) Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Вы пытались добавить атрибут Class-Path в манифест? Я думаю, что добавление следующего будет работать:

Class-Path : classes/

Если это не сработает, вам, возможно, придется упаковать jar, содержащий ваши классы на корневом уровне, а затем добавить его в ваш myProj.jar. Поэтому сначала вы должны создать jar только с вашими классами, myClasses.jar, а затем упаковать этот jar в myProj.jar. Манифест будет содержать:

Class-Path : classes/myClasses.jar

и ваша банка будет выглядеть так:

myProj.jar
  - META-INF/MANIFEST.MF
  - classes/myClasses.jar

Я на самом деле никогда не пробовал это, так что извините, если это не работает, как ожидалось. Вот дополнительная информация об атрибуте Class-Path.

0 голосов
/ 16 марта 2012

вы, вероятно, хотите, чтобы ваш набор файлов муравьев был:

<fileset dir="dist/classes" includes="**/*" />

Просто имея сам каталог, каталог "classes" - это то, что помещается в ваш файл jar.Помещая include, вы используете классы в качестве базы, а затем он берет все содержимое этого каталога и помещает его в jar.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...