Maven - как управлять несколькими банками с общими зависимостями - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть большой проект, который состоит из нескольких небольших проектов, каждый из которых имеет pom.xml. Некоторые проекты являются зависимостями других. То, как я это сделал, - это создание нескольких независимых затененных файлов jar и war благодаря maven.

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

Сначала я подумал о компиляции пользовательского проекта со всеми зависимостями в затененный jar. Однако при запуске приложения я получил ошибку приведения:

java.lang.ClassCastException: com.some.class cannot be cast to com.another.class

Полагаю, проблема в том, что некоторые зависимости двойные. com.another.class существует в двух оттенках jar, и поэтому он не совпадает с пользовательским проектом jar и основным проектом. У меня есть один пакет Java, который зависит от основного проекта jar, а также от пользовательского проекта jar.

Кто-нибудь имеет представление о том, как заставить это работать? Есть ли способ не включать зависимости в пользовательский проект jar и дать понять, что он должен искать зависимости в другом jar?

Надеюсь, я смог понять себя.

Спасибо!

Ответы [ 3 ]

1 голос
/ 12 апреля 2019

Главное: затененные банки не должны зависеть от других файлов.

Вы можете создавать затененные (или жирные) банки, чтобы запускать их как отдельные приложения, но не помещайте их в <dependencies>.

Если вам нужны классы в нескольких проектах, поместите их в проект или модуль и скомпилируйте их как обычный jar (не затененный).Тогда вы можете использовать его как зависимость.

0 голосов
/ 12 апреля 2019

Другой способ - выбрать, какие артефакты попадут в вашу затененную банку. Таким образом, вы можете включить группу, за исключением некоторых конкретных артефактов.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.1</version>
    <configuration>
        <createSourcesJar>true</createSourcesJar>
        <minimizeJar>false</minimizeJar>
        <artifactSet>
            <includes>
                <include>org.vaadin.*:*</include>
                <include>com.vaadin:*</include>
                <include>com.vaadin.external.atmosphere:*</include>
                <include>com.vaadin.external.slf4j:*</include>
                <include>com.github.*:*</include>
                <include>fi.jasoft:dragdroplayouts</include>
            </includes>
            <excludes>
                <exclude>com.vaadin:vaadin-client-compiler</exclude>
                <exclude>com.vaadin:vaadin-client</exclude>
                <exclude>com.vaadin:vaadin-theme-compiler</exclude>
            </excludes>
        </artifactSet>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>
0 голосов
/ 12 апреля 2019

Вы можете исключить подчиненные зависимости в зависимости:

<dependency>
  <groupId>my.group</groupId>
  <artifactId>my-artifact</artifactId>
  <version>1.2.3</version>
  <exclusions>
    <exclusion>
      <artifactId>xercesImpl</artifactId>
      <groupId>xerces</groupId>
    </exclusion>
    <exclusion>
      <artifactId>xmlParserAPIs</artifactId>
      <groupId>xerces</groupId>
    </exclusion>
  </exclusions>
</dependency>

...