Question

Mon descripteur d'assembly applique correctement les inclus et exclus lorsque les dépendances sont directement incluses dans le fichier pom.

Cependant, lorsque je mets les dépendances dans le fichier pom parent, l'assembly: le répertoire directory indique que les inclusions et les exclus ne sont pas déclenchées.

Savez-vous pourquoi maven-assembly-plugin ignore les dépendances parent? Comment puis-je résoudre ce problème?

Voici les descripteurs de maven et d'assemblage:

Descripteur d'assemblage:

<assembly>
  <id>distribution</id>
  <formats>
    <format>zip</format>
  </formats>
  <fileSets>
    <fileSet>
      <includes>
        <include>readme.txt</include>
      </includes>
    </fileSet>
    <fileSet>
      <directory>target</directory>
      <outputDirectory>/lib</outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
  <dependencySets>
    <dependencySet>
      <outputDirectory>/lib</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <excludes>
        <exclude>org.tanukisoftware:wrapper:exe:3.3.5</exclude>
      </excludes>
    </dependencySet>
    <dependencySet>
      <outputDirectory>/bin</outputDirectory>
      <unpack>false</unpack>
      <scope>runtime</scope>
      <includes>
        <include>org.tanukisoftware:wrapper:exe:3.3.5</include>
      </includes>
    </dependencySet>
  </dependencySets>
</assembly>

Définition du plug-in d'assemblage POM enfant:

    <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
            <ignoreDirFormatExtensions>true</ignoreDirFormatExtensions>
            <descriptors>
                <descriptor>assembly.xml</descriptor>
            </descriptors>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>      
                <goals>
                    <goal>directory</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

Dépendances du POM parent:

<dependencies>
    <dependency>
        <groupId>org.tanukisoftware</groupId>
        <artifactId>wrapper</artifactId>
        <version>3.3.5</version>
        <type>dll</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.tanukisoftware</groupId>
        <artifactId>wrapper</artifactId>
        <version>3.3.5</version>
        <type>exe</type>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.tanukisoftware</groupId>
        <artifactId>wrapper</artifactId>
        <version>3.3.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

Avertissements dans le rapport de construction:

[assembly:directory {execution: make-assembly}]
Reading assembly descriptor: assembly.xml
Processing DependencySet (output=/lib)
[WARNING] The following patterns were never triggered in this artifact exclusion filter:
o  'org.tanukisoftware:wrapper:exe:3.3.5'

Processing DependencySet (output=/bin)
[WARNING] The following patterns were never triggered in this artifact inclusion filter:
o  'org.tanukisoftware:wrapper:exe:3.3.5'
Était-ce utile?

La solution

Je ne sais pas si cela va aider, mais ce que je fais toujours, c'est que le pom du parent place les dépendances dans un bloc dependencyManagement;

    <dependencyManagement>
    <!-- dependencies with exclusions -->
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>

            <version>${version.springframework}</version>

            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Ensuite, dans le pom enfant, listez à nouveau les dépendances, mais sans la version et les exclusions

  <dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
    </dependency>

Mais pour être honnête, pour ma première et unique assemblée, je ne pouvais pas le faire fonctionner dans un module enfant et le mettre dans le pompon du parent. Voici mon fichier d'assemblage, pour la création d'un fichier zip pour un programme Java autonome, géré par cron:

<?xml version="1.0" encoding="UTF-8"?>

<assembly>
  <id>${project.layer}-both</id>

  <formats>
      <format>zip</format>
  </formats>

  <includeBaseDirectory>false</includeBaseDirectory>

  <baseDirectory>/</baseDirectory>

  <moduleSets>
      <moduleSet>
          <includes>
              <include>edu.berkeley.ist.cars:cars_upload</include>
          </includes>

          <binaries>
              <unpack>false</unpack>
              <useStrictFiltering>true</useStrictFiltering>
              <includeDependencies>true</includeDependencies>
              <outputDirectory>upload</outputDirectory>
          </binaries>
      </moduleSet>

      <moduleSet>
          <includes>
              <include>edu.berkeley.ist.cars:cars_download</include>
          </includes>

          <binaries>
              <unpack>false</unpack>
              <useStrictFiltering>true</useStrictFiltering>
              <includeDependencies>true</includeDependencies>
              <outputDirectory>download</outputDirectory>
          </binaries>
      </moduleSet>
  </moduleSets>

  <!--
      crontab.txt is put in twice, in both upload and download, just in case.
      -->
  <files>
      <!-- upload files -->
      <file>
          <source>src/stuff/scripts/cars_upload.sh</source>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>upload</outputDirectory>
      </file>

      <file>
          <source>src/stuff/notes/crontab-${project.layer}.txt</source>
          <destName>crontab.txt</destName>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>upload</outputDirectory>
      </file>

      <!-- download files -->
      <file>
          <source>src/stuff/scripts/cars_download.sh</source>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>download</outputDirectory>
      </file>

      <file>
          <source>src/stuff/notes/crontab-${project.layer}.txt</source>
          <destName>crontab.txt</destName>
          <lineEnding>unix</lineEnding>
          <filtered>true</filtered>
          <outputDirectory>download</outputDirectory>
      </file>
  </files>
</assembly>

Il existe deux répertoires de niveau supérieur dans le fichier zip: télécharger et télécharger.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top