Maven WAR: разделить классы JAR для разных пакетов - PullRequest
1 голос
/ 09 января 2020

Я занимаюсь разработкой веб-приложений J2EE с Eclipse (используя плагин m2e). Если в моем проекте есть несколько классов, выделенных для конкретного c клиента, обычно я группирую их в указанный c пакет, например:

  • com.myapp.logi c
  • com.myapp.logi c .customer1
  • com.myapp.logi c .customer2

, поэтому во время развертывания я могу упаковать их в разные JAR-файлы, используя Затмение .jardes c дескрипторов, получая что-то вроде:

  • myapp.jar
  • myapp-customer1.jar
  • myapp-customer2.jar

Преимущество этого подхода состоит в том, что если мне нужно обновить только классы customer1, я могу обновить только jar customer1 (если зависимости не изменены).

Теперь я хотел бы использовать Maven в своем веб-приложении. проекты, но я не могу найти решение, чтобы держать банки отдельно. Используя плагин WAR с конфигурацией archiveClasses, я могу развернуть только один JAR для своих классов и не могу настроить способ разделения пакетов на разные JAR.

Я решил использовать наложения, но весь проект должен быть разделен на несколько проектов и может стать слишком сложным (особенно если у меня 20/30 клиентов). Я бы предпочел только «более легкое» разделение для развертывания классов.

В качестве альтернативы, есть ли способ с Maven упаковывать мои классы в разные JAR-файлы перед сборкой WAR (используя разные executions) и затем включать их в WAR игнорирование стандартного развертывания классов (или эквивалентного JAR)?

1 Ответ

2 голосов
/ 09 января 2020

Если вы хотите использовать Maven, было бы лучше создать многомодульный проект, если вы хотите разделить код в разных банках.

Таким образом, вы бы получили:

  1. One родительский pom (упаковочный pom)
  2. одна или несколько вспомогательных банок (упаковочная фляга)
  3. одна война за упаковку приложения (упаковочная фишка)

Вот полный пример (который фактически строит EAR, но вы можете пропустить EAR, если вам это не нужно):

https://howtodoinjava.com/maven/multi-module-project-eclipse/

Если вам нужно разделить для клиентов, вы может сделать это с профилями Maven:

    <profile>
        <id>customer2</id>
        <dependencies>
             <dependency>
                <groupId>myGroup</groupId>
                <artifactId>artificatCustomer2</artifactId>
            </dependency>        


    <profile>
        <id>customer1</id>
        <dependencies>
             <dependency>
                <groupId>myGroup</groupId>
                <artifactId>artificatCustomer1</artifactId>
            </dependency>        
...