Как удалить конкретный каталог из целевого каталога Maven в конце сборки?

У меня есть задача распаковать все фляги, упомянутые в pom.xml, и затем упаковать распакованный контент в одну флягу. Я могу сделать это, используя цель распаковки-зависимости плагина зависимости и jar-плагина. Однако после того, как я сгенерирую новую флягу, я хочу удалить папку, которая была создана после распаковки. Я использую следующий фрагмент кода в моем pom.xml (пожалуйста, прочитайте комментарии над каждым плагином).

<build>
    <plugins>
     <!-- This part of the code is used to unpack all the dependencies mentioned in my pom.xml -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.10</version>
        <executions>
          <execution>
            <id>unpack-dependencies</id>
            <phase>package</phase>
            <goals>
              <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
              <includes>**/*.class</includes>
              <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory>
              <overWriteReleases>false</overWriteReleases>
              <overWriteSnapshots>true</overWriteSnapshots>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- This part of the code is used for creating a jar with all the contents of the "alternateLocation" directory above -->
      <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <version>2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                    <configuration>
                        <classesDirectory>${project.build.directory}/alternateLocation</classesDirectory>
                        <outputDirectory>${project.build.directory}</outputDirectory>
                        <finalName>abc</finalName>
                    </configuration>
                </execution>
            </executions>
        </plugin>

       <!-- I am using this part of the code to delete the "alternateLocation" after everything is done, but it deletes the target directory instead -->
        <plugin>
            <artifactId>maven-clean-plugin</artifactId>
            <version>3.0.0</version>
            <executions>
                <execution>
                    <id>auto-clean</id>
                    <phase>install</phase>
                    <goals>
                        <goal>clean</goal>
                    </goals>
                    <configuration>
                        <filesets>
                            <fileset>
                                <directory>${project.build.directory}/alternateLocation</directory>
                            </fileset>
                        </filesets>
                        <excludeDefaultDirectories>${project.build.directory}</excludeDefaultDirectories>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>

Чистый плагин в основном удаляет целевой каталог по умолчанию. Итак, как я могу удалить папку "alternateLocation" из целевого каталога в конце сборки. (Я думаю, вы можете сделать это с помощью maven-antrun-plugin, но я не хочу использовать этот плагин.).

1 ответ

Вы можете решить эту проблему с помощью подключаемого модуля maven-assembly через предопределенный дескриптор jar-with-dependencies, что можно сделать следующим образом:

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      [...]
</project>

Чем вам не нужна дополнительная настройка.

Другие вопросы по тегам