Как упаковать мои классы в a.jar и все-таки пакет как война?
Итак, у меня есть веб-приложение spring mvc, которое я построил в IntelliJ 9, используя maven.
когда я запускаю:
mvn clean install
он упаковывает все в обоих .военный файл и взорванная война.
мой макет проекта использует тип arch простого веб-приложения maven.
How can I have my classes compiled into a .jar file also?
в настоящее время мои занятия в:
/target/myapp/WEB-INF/classes/
Я хочу, чтобы он скомпилировал мой код .jar like:
myapp-1.0.jar
и что у этого в моем /target/myapp/WEB-INF/lib
папка, как и все мои другие банки.
обновление
я хочу, чтобы это было сделано через maven, а не intellij.
6 ответов
вы можете легко создать два артефакта-банку и войну.
Я не уверен, в чем преимущество вашего .файлы классов в JAR в отличие от WEB-INF / classes. Оба сжаты; банка не обеспечит дополнительного сжатия. Возможно, вы захотите использовать их снова .Class файлы в других приложениях. если это так, вы можете рассмотреть вопрос о перемещении этих классов Java в отдельный модуль и добавлении файла JAR, который вы создаете, как и любой другой сторонний JAR в вашем War-файл. Другие приложения легко смогут проверить файл JAR из вашего репозитория и просто повторно использовать его. Это лучше всего сделать, переместив общие классы Java в отдельный репозиторий в вашей системе управления версиями.
мне совсем не ясно, какая польза может быть от того, что содержимое войны упаковано в банку. Код, реализующий webapp, не будет работать без контекста, в который развертывается война.
тем не менее, вполне практично думать с точки зрения извлечения функционального ядра вашего кода в отдельный модуль Maven, который имеет упаковку JAR и хороший Java API. Тогда ваш военный модуль может зависеть от этого, и только должен содержать точно код, чтобы превратить этот Java API в веб-API. Это имеет то преимущество, что это также значительно улучшит способность вашего кода тестироваться (тестирование против JAR, безусловно, будет проще) и позволит вам думать с точки зрения наличия других клиентов того же базового кода. Это может вас заинтересовать, а может и нет. Вам нужно любой Java-код непосредственно на войне? Может да, может нет. Есть несколько способов сделать это в конце концов...
простое решение находится в конфигурации для War-плагина:
<attachClasses>true</attachClasses>
который выполнит эту работу и создаст отдельный файл jar. Этот jar имеет классификатор "классы", которые могут быть изменены путем подачи в конфигурацию. Это может быть полезно, если вы разделили интеграционные тесты, которые полагаются на classed из проекта war, чтобы опубликовать их и сделать доступными в качестве зависимостей. Это не имеет ничего общего с разделением обязанностей.
Runninng
mvn jar:jar install
сделает опарник если вы устанавливали упаковывая тип к опарнику. Без каких-либо изменений в вашем pom.
поэтому все, что вам нужно, это запустить эту строку отдельно, добавить ее в скрипт или добавить jar:jar
цель существующей сборки maven.
тип упаковки определяется тегом "упаковка" в pom.xml (обычно помещается довольно поверх файла вместе с идентификатором артефакта, версией и т. д. проекта.
попробуйте найти
<packaging>war</packaging>
В пом.xml и измените его на
<packaging>jar</packaging>