2017-10-13 7 views
2

J'ai un problème avec un projet maven où je distribue des DLL à partir du dossier src/main/resources/lib.Maven corrompre les fichiers binaires dans source/main/ressources lors de la construction de jar

Le projet est construit comme un seul jar avec des dépendances utilisant le maven-assembly-plugin.

Malheureusement, le processus maven corrompt mes bibliothèques dll pendant le processus de copie, de sorte qu'elles ne sont plus utiles à l'application.

J'ai jeté un coup d'oeil à des concepts tels que le filtrage de ressources.

Voici mon pom.xml pertinent

Quelqu'un at-il des idées?

Je pense que je dois faire quelque chose comme ça, mais pour l'instant ça ne marche pas pour moi.

  <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 

        <resources> 
         <resource> 
          <directory>${basedir}/src/main/resources/lib</directory> 
          <filtering>false</filtering> 
         </resource> 
        </resources> 

        <archive> 
         <manifest> 
          <mainClass>de.bochumuniruhr.psy.bio.behaviourcoder.Main</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 

Ma solution finale (basée sur les réponses ci-dessous):

Merci pour les grandes réponses. J'ai fini par aller avec la réponse qui ne nécessite pas d'étendre la configuration du plugin maven-resources-plugin. J'ai placé mes fichiers binaires dans le dossier src/main/resources/unfiltered-resources car j'avais besoin de filtrer mes autres ressources.

Voici un lien vers le source code.

Ci-dessous est mon pom de travail final au moment de l'écriture.

<build> 
     <finalName>BehaviourCoder_${git.build.time}_${git.commit.id.describe-short}</finalName> 
     <resources> 
      <resource> 
       <directory>${basedir}/src/main/resources</directory> 
       <filtering>true</filtering> 
      </resource> 
      <resource> 
       <directory>${basedir}/src/main/unfiltered-resources</directory> 
       <filtering>false</filtering> 
      </resource> 
     </resources> 
     <plugins> 
      <plugin> 
       <groupId>pl.project13.maven</groupId> 
       <artifactId>git-commit-id-plugin</artifactId> 
       <version>2.2.2</version> 
       <executions> 
        <execution> 
         <goals> 
          <goal>revision</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <generateGitPropertiesFile>true</generateGitPropertiesFile> 
        <injectAllReactorProjects>true</injectAllReactorProjects> 
        <dateFormat>yyyy-MM-dd_HHmmss</dateFormat> 
        <dateFormatTimeZone>UTC</dateFormatTimeZone> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>${java.version}</source> 
        <target>${java.version}</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <mainClass>de.bochumuniruhr.psy.bio.behaviourcoder.Main</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 

Répondre

1

Cette partie:

   <resources> 
        <resource> 
         <directory>${basedir}/src/main/resources/lib</directory> 
         <filtering>false</filtering> 
        </resource> 
       </resources> 

devrait être sous la rubrique <build/> comme ceci:

<project> 
     <build> 
      <resources> 
       <resource> 
        <directory>${basedir}/src/main/resources/lib</directory> 
        <filtering>false</filtering> 
       </resource> 
      </resources> 
      <plugins> 
       ... 
      </plugins> 
     </build> 
</project> 
2

Lorsque l'extension de l'ensemble des coups de pied dans il est déjà trop tard, car les ressources étaient déjà copié par le plugin de ressources maven. Vous devez exclure le filtrage sur une phase antérieure (lorsque les ressources sont copiées dans le dossier cible par le plugin de ressources maven).

Voir les documents de Maven comment faire cela: https://maven.apache.org/plugins/maven-resources-plugin/examples/binaries-filtering.html

Pour votre cas, cela peut être quelque chose comme:

 <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-resources-plugin</artifactId> 
      <version>3.0.2</version> 
      <configuration> 
       <nonFilteredFileExtensions> 
        <nonFilteredFileExtension>dll</nonFilteredFileExtension> 
       </nonFilteredFileExtensions> 
      </configuration> 
     </plugin> 
    </plugins>