0

У меня проблема:Maven building jar: объединить дубликаты ресурсов из зависимостей

У меня есть проект с пружинным ботинком. Он отлично работает на eclipse, но мне нужно создать банку с зависимостями, поэтому я добавляю конфигурацию maven-assembly-plugin в pom.

Некоторые зависимости пружинные имеет в META-INF файл с именем spring.schemas, и мне нужно, чтобы объединить все spring.schemas в одну (весна-контекст, пружинных бобы и т.д.)

Я попытался this solution с помощью Maven-тень-pluggin и AppendingTransformer, и он объединяет все spring.schemas отлично ... Но есть проблема, когда я исполняю банку, он терпит неудачу с:

java.lang.IllegalStateException: Unable to open nested entry 'lib/spring-boot-starter-batch-1.2.4.RELEASE.jar'. 
It has been compressed and nested jar files must be stored without compression. 
Please check the mechanism used to create your executable jar file 

Таким образом, тень плагина сжимать банку, и пружинная загрузка не нравится, и нет способа отключить сжатие в тени. Я вручную скопирую тени spring.schemas, созданные тенью, и я положил его в сборку maven-assembly-pluggin и несжатую банку с зависимостями. Оно работает.

Затем я попытался включить сгенерированные spring.schemas в папку с ресурсами, но это всегда отменено spring.schemas из spring-context.

Я также попытался this other solution исключить spring.schemas из кувшина зависимостей с использованием дескриптором XML в сборке, но он не работает:

<assembly 
    xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.3 http://maven.apache.org/xsd/assembly-1.1.3.xsd"> 
    <id>distribution</id> 
    <formats> 
     <format>jar</format> 
    </formats> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <includes> 
       <include>org.springframework:spring-context</include> 
      </includes> 
      <unpack>true</unpack> 
      <unpackOptions> 
       <excludes> 
        <exclude>**/spring.schemas</exclude> 
       </excludes> 
      </unpackOptions> 
     </dependencySet> 
     <dependencySet> 
      <outputDirectory>/</outputDirectory> 
      <excludes> 
       <exclude>org.springframework:spring-context</exclude> 
      </excludes> 
      <unpack>true</unpack> 
     </dependencySet> 
    </dependencySets> 
</assembly> 
  <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
        <archive> 
         <manifest> 
          <mainClass>org.springframework.batch.core.launch.support.CommandLineJobRunner</mainClass> 
         </manifest> 
         <compress>false</compress> 
        </archive> 
        <descriptors> 
         <descriptor>src/main/assembly/distribution.xml</descriptor> 
        </descriptors> 
       </configuration> 
       <executions> 
        <execution> 
         <id>make-assembly</id> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 

Это моя зависимость:

<dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-batch</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.hsqldb</groupId> 
      <artifactId>hsqldb</artifactId> 
     </dependency> 
     <!-- MySql 5.5 Connector --> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.35</version> 
     </dependency> 
    </dependencies> 

Любые идеи? Заранее спасибо

ответ

0

Вместо использования maven-assembly-plugin и maven-shade-pluggin я бы попытался использовать Spring-boot-maven-плагин Spring Boot, который можно использовать для создания исполняемого «живого» JAR. См. this reference documentation page, раздел «73.2 Создание исполняемого JAR с Maven».

<build> 
<plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
    </plugin> 
</plugins> 

Или, если вы не используете пружинными загрузки стартер-родительский POM:

<build> 
<plugins> 
    <plugin> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-maven-plugin</artifactId> 
     <version>1.2.5.RELEASE</version> 
     <executions> 
      <execution> 
       <goals> 
        <goal>repackage</goal> 
       </goals> 
      </execution> 
     </executions> 
    </plugin> 
</plugins>