Как автоматизировать сборку Java-класса и всех классов, от которых он зависит? - PullRequest
2 голосов
/ 06 октября 2009

Полагаю, это своего рода продолжение к вопросу 1522329 .

В этом вопросе говорилось о получении списка всех классов, используемых во время выполнения, с помощью опции java -verbose: class.

Меня интересует автоматизация сборки файла JAR, который содержит мой класс (ы) и все остальные классы, на которые они полагаются. Как правило, именно здесь я использую код из «клиентской логики» какого-либо стороннего продукта с открытым исходным кодом, но они не предоставили чистый набор клиентских объектов API. Их полный набор кода идет на стороне сервера, но мне нужны только необходимые клиентские биты.

Это может показаться обычной проблемой, но я не видел ничего (например, в Eclipse), которое помогло бы с этим. Я что-то упустил?

Конечно, я все еще могу сделать это вручную: прикусив пулю и включив весь сторонний код в массивный JAR (оскорбляя мои чувства пуриста) / пошаговое руководство по исходному коду / пробная версия и ошибка / -бербоз : class type stuff (но последний не будет работать там, где, скажем, мой код работает как часть сервлета J2EE, и, таким образом, я хочу видеть это только для данного веб-приложения Tomcat и, в идеале, только для классов, связанных с мои классы в нем).

Ответы [ 3 ]

5 голосов
/ 06 октября 2009

Я бы рекомендовал использовать систему сборки, такую ​​как Ant или Maven. Maven разработан с учетом Java и является тем, чем я пользуюсь исключительно. Вы можете даже заставить Maven собрать (используя плагин сборки) все зависимые классы в один большой jar-файл, так что вам не придется беспокоиться о зависимостях.

http://maven.apache.org/

Edit:

Что касается сервлета, вы также можете определить , какие зависимости вы хотите упаковать в свой jar, и если вы создаете отдельное приложение, вы можете заставить инструмент jar создать исполняемый jar.

примечание: да, я немного сторонник Maven, так как это значительно облегчило работу над проектом. Нет, я не работаю над проектом лично. :)

2 голосов
/ 25 сентября 2012

Взгляните на ProGuard .

ProGuard - это бесплатный инструмент для сжатия файлов класса Java, оптимизатор, обфускатор и предварительный верификатор. Он обнаруживает и удаляет неиспользуемые классы, поля, методы и атрибуты. Он оптимизирует байт-код и удаляет неиспользуемые инструкции. Переименовывает остальные классы, поля и методы, используя короткие бессмысленные имена. Наконец, он предварительно проверяет обработанный код для Java 6 или для Java Micro Edition.

1 голос
/ 08 октября 2009

То, что вы хотите, это не только включить классы, на которые вы полагаетесь, но и классы, на которые вы полагаетесь, на которые вы полагаетесь. И так далее, и тому подобное.

Так что это не проблема сборки, а скорее проблема зависимости. Чтобы ответить на ваш вопрос, вы можете решить это с помощью Maven (очевидно) или Ant + Ivy.

Я работаю с Ivy и иногда создаю «ueber-jar», используя функциональность zipgroupfileset задачи Ant Jar. Не очень элегантно, скажем так, но это делается за 10 секунд: -)

...