Spring boot Maven использует один и тот же jar с другой версией в многомодульном проекте - PullRequest
0 голосов
/ 10 апреля 2019

У нас довольно странное требование.

Пружинная загрузка с несколькими проектами

xbean - это старая версия xmlbeans apache jar

Мы хотимиспользовать оба

  1. xbean old jar с некоторыми пользовательскими изменениями в одном и том же jar
  2. последние xmlbeans apache jar

у нас текущая реализация как

Main () -

| - проект XLSImportProject - для которого требуется последний файл jar для чтения файла xlsx

| - проект B - для которого требуется старый файл jar для пользовательской операции

|- C проект - также требовать старый jar для пользовательской операции

Если мы отдадим maven приоритет xbean old jar , тогда мы получим исключение как

org.apache.poi.ooxml.POIXMLException: org.apache.xmlbeans.XmlOptions.setEntityExpansionLimit(I)Lorg/apache/xmlbeans/XmlOptions;
    at org.apache.poi.ooxml.POIXMLFactory.createDocumentPart(POIXMLFactory.java:66)
    at org.apache.poi.ooxml.POIXMLDocumentPart.read(POIXMLDocumentPart.java:648)
    at org.apache.poi.ooxml.POIXMLDocument.load(POIXMLDocument.java:180)
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:286)
    at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:83)
    at org.apache.poi.xssf.usermodel.XSSFWorkbookFactory.createWorkbook(XSSFWorkbookFactory.java:130)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.poi.ss.usermodel.WorkbookFactory.createWorkbook(WorkbookFactory.java:314)
    at org.apache.poi.ss.usermodel.WorkbookFactory.createXSSFWorkbook(WorkbookFactory.java:296)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:214)
    at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:180)

Если мы дадимmaven приоритет для последних xmlbeans , тогда будут ошибки:

Exception in thread "Thread-14" java.lang.NoSuchMethodError: org.apache.xmlbeans.XmlObject.getParent()Lorg/apache/xmlbeans/XmlObject;

Мы должны использовать старый jbean jar в подпроекте и последний jmlbeans jar в другом проекте.

Но Spring всегда будет банкой, которая определяется первой в зависимости.

Ответы [ 2 ]

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

Взгляните на Плагин оттенка Maven . При необходимости он переименовывает пакеты в зависимости от содержимого банки. Создайте Uber jar для своего основного приложения, используя shade plugin.

Конфигурация плагина Shade:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.2.1</version>
        <configuration>
          <!-- put your configurations here -->
        </configuration>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  ...
</project>
0 голосов
/ 10 апреля 2019

Это похоже на классическую проблему настройки загрузчика классов. Я бы не пошел по этому пути. Лучшее предложение будет

  1. создайте свой собственный jar со всеми зависимостями (хитро, так как вы столкнетесь с проблемами обратной совместимости). Взгляните здесь для переупаковки банок.
  2. Разбейте многомодульный проект на разные проекты с каждым набором проектов, использующим определенную зависимость.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...