Сборка Ant, создающая 0-байтовый файл jar - PullRequest
1 голос
/ 02 апреля 2012

В течение нескольких месяцев у меня периодически возникала проблема, когда во время моей сборки ant один из создаваемых jar-файлов имел размер 0 байт.Этот 0-байтовый jar-файл заканчивается упаковкой в ​​мой файл ear, и последующее развертывание завершается неудачно.Моя структура проекта выглядит следующим образом:

myProj
    myProj-common
    myProj-ejb
    myProj-web

Результирующий каталог сборки содержит эти файлы

lib
    myProj-common.jar  <-- sometimes 0 bytes
META-INF
   application.xml
   MANIFEST.MF
myProj-common.jar <-- never 0 bytes
myProj-ejb.jar
myProj-web.war

Это файл myProj-common.jar в lib, который составляет 0 байт.Тот, что находится в главном каталоге сборки, всегда имеет правильный размер.Мне непонятно, почему у меня есть две копии файла jar в конечном результате.Все сценарии сборки Ant были автоматически сгенерированы NetBeans.

Я все еще изучаю все тонкости файлов сборки ant, поэтому мне не совсем понятно, почему они такие сложные.Я написал несколько минимальный альтернативный файл build.xml, который я использую для сборки программного обеспечения в нашей среде Hudson на сервере Solaris.Эта сборка никогда не имеет этой проблемы.

После обновления с NetBeans 7.0.1 до 7.1.1 проблема стала намного более частой и возникает, собираю ли я проект внутри NetBeans или в командной строке.Система, где у меня возникла эта проблема, работает под управлением Windows XP.С NB 7.0.1 у меня была плохая сборка, возможно, один раз в шесть.Теперь у меня есть -хорошая сборка, может быть, один раз в десять.

Любые указатели на то, где я должен искать для отладки, это было бы очень полезно.

Ответы [ 5 ]

1 голос
/ 05 января 2015

Я знаю, что это старый вопрос, но поделиться опытом mi может помочь кому-то.

У меня была такая же проблема с netbeans 8.0.2 в linux, папка lib моего корпоративного проекта выглядит так:

~/NetBeansProjects/myeeproject/build/lib $ ls -l
-rw-rw-r-- 1 user1 user1   16013 jan  5 11:52 my_lib.jar
-rw-rw-r-- 1 user1 user1 1489258 jan  5 11:52 my_ws_lib.jar
-rw-rw-r-- 1 user1 user1       0 jan  5 11:52 commons-lang3-3.1.jar
-rw-rw-r-- 1 user1 user1       0 jan  5 11:52 itextpdf-5.4.5.jar
-rw-rw-r-- 1 user1 user1       0 jan  5 11:52 primefaces-4.0.jar
-rw-rw-r-- 1 user1 user1       0 jan  5 11:52 primefaces-extensions-1.1.0.jar

и я не могу развернуть проект на сервере Glassfish.Повторная очистка и сборка иногда решают проблему, иногда нет, но я обнаружил, что удаление 0-байтового jar, а затем сборка (или развертывание) работает каждый раз.Проблема в том, что если файл уже существует, netbeans просто не копирует библиотеку, он не проверяет размер файла, поэтому удаление его заставляет netbeans делать новую копию.

bye

0 голосов
/ 07 сентября 2015

Я нашел решение этой проблемы здесь: https://netbeans.org/bugzilla/show_bug.cgi?id=216033

В моем случае (Nebeans 8.0.2) было достаточно снять флажок «Скомпилировать при сохранении» для моего корпоративного приложения.(Свойства проекта -> Компилировать -> Компилировать при сохранении)

0 голосов
/ 22 июня 2012

Похоже, это конфликт с нашим программным обеспечением для шифрования всего диска, PGP Desktop. Недавно он работал в ухудшенном режиме на моем ноутбуке, что значительно замедлило мои сборки, но тогда я никогда не видел, чтобы проблема возникла. Мое предположение состоит в том, что у драйверов более низкого уровня осталось время для выполнения любых действий, которые они предпринимали, и очистки их буферов записи. Похоже, что сейчас файл jar копируется до того, как буфер записи очищается, и, следовательно, копируется 0-байтовый файл. Ant никогда не видит ошибку, поэтому в процессе сборки нет сбоев.

К сожалению, я мало что могу сделать, кроме как, возможно, изменить скрипт сборки, чтобы добавить задержку перед копированием файла jar. Прямо сейчас мой обходной путь - вручную скопировать банку после полной очистки и сборки, а затем запустить сборку (в отличие от очистки и сборки), для перепаковки файла ear требуется всего несколько секунд.

Думаю, причина того, что проблема стала более распространенной, когда я обновил NetBeans, заключается в том, что некоторые изменения в IDE ускорили сборку, и поэтому я чаще сталкивался с проблемой буферизации.

0 голосов
/ 26 января 2013

В последнее время у меня случилась похожая проблема. Чтобы подвести итог, у меня есть файл EAR, который содержит несколько файлов EJB и файл WAR. Я нахожусь в 64-разрядной среде Windows 7 с Netbeans 7.2, и я работаю на локальном сервере JBoss 7.

Я видел, как это происходит, когда я делаю одну из двух вещей.

  1. Когда я добавляю в проект банку или библиотеку, а затем удаляю ее
  2. Когда я делаю чистку и строю файл EAR

Я сталкивался с этой проблемой много раз, теперь это даже не смешно. Я не знаю, есть ли у меня точно такая же проблема, как у вас, но вот что решило мою проблему.

После удаления любых jar или библиотек, вы должны очистить и собрать. Когда я удаляю любой JAR-файл или библиотеку, я вижу пустые фляги в папке lib моего EAR. Очистка этого поможет уменьшить вашу проблему.

Вот главное, что со мной происходит.

  1. Я очистил ВСЕ проекты зависимостей и сам файл EAR и убедился, что все папки / dist удалены.
  2. Я выбрал «Очистить и построить» в моем EAR-файле.
  3. Я открыл файл EAR в своей папке / dist и увидел, что в моей папке / lib всегда будет хотя бы один файл JAR, который является «пустым» или имеет нулевой размер.

Очистить и построить ТОЛЬКО проект (ы), который имеет нулевой размер. Затем выберите «Build» и , а не «Clean and Build» в вашем EAR-файле. Надеюсь, это поможет.

Я могу только предположить, что EJB создается дважды, так как это зависимость в моем файле WAR, и он копируется в папку / lib во время второй сборки. Я не делал никаких отладок муравья, только обнаружил, что это решение моей проблемы.

Сводка: Очистите и соберите правильно и убедитесь, что вы "Очистите и соберите", то есть проекты, которые заканчиваются размером 0 в вашей папке lib, затем нажмите "Построить" только для вашего EAR-файла .

Удачи!

0 голосов
/ 03 апреля 2012

Вы должны быть в состоянии выяснить, что происходит, выполнив Ant с флагами -d (отладка) и -v (подробный).Вы можете добавить эти флаги в NetBeans или выполнить файл сборки, сгенерированный NetBeans, из командной строки.

...