Как упаковать мои классы в 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>

ok напишите команду java в консоли

jar cvf myapp-1.0.сосуд.* класс!--1-->