Как сказать Maven переупаковать все зависимости в один файл jar - PullRequest
0 голосов
/ 13 февраля 2019

Учитывая файл pom.xml со списком зависимостей, есть ли команда Maven для объединения всех этих jar-файлов в один большой jar-файл? Я не хочу включать мои файлы .class в сборку - Я хочу включить только файлы библиотек .class / jar в сборку - есть ли способ сделать это?

Я вижу этот плагин вокруг:

 <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>prepare-package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/Crunchify/lib</outputDirectory>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
            </configuration>
        </execution>
    </executions>
</plugin>
  1. Я не могу понять, куда он копирует зависимости - даже если я жестко закодировал путь вместо ${project.build.directory}/Crunchify/lib, в это место ничего не записывается,
  2. Я предполагаю, что он копирует jar, но не помещает содержимое нескольких jar в один большой файл jar.

Я также вижу этот общий плагин:

http://maven.apache.org/plugins/maven-assembly-plugin/usage.html

     <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- bind to the packaging phase -->
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

, но когда я запускаю mvn clean package с maven-assembly-plugin, присутствующим в pom.xml, я не вижу никаких новых файлов jar.

1 Ответ

0 голосов
/ 13 февраля 2019

Wit jar-with-dependencies и single~package, вы попали в одну из сборок "GOTCHAS" (сборка не имеет ничего перед пакетом (не завершена)).

Но при объединении обоих плагинов это будет работать:

/ pom.xml

<project>
   ...
    <!-- many many dependencies -->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                    <descriptors>
                        <descriptor>src/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.1.1</version>
                <executions>
                    <execution>
                        <id>copy-deps</id>
                        <phase>process-sources</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

/ src / assembly / assembly.xml

<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
  <id>big-big-jar</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <fileSets>
    <fileSet>
      <directory>${project.build.directory}/dependency</directory>
      <outputDirectory />
      <includes>
        <!-- attention: maybe you need more ... zip, tz.gz.bz. -->
        <include>*.jar</include>
      </includes>
    </fileSet>
  </fileSets>
</assembly>

cmd

mvn clean package
...
BUILD SUCCESS

...создаст файл:

/ target / $ {build.finalName} -big-big-jar.jar

.., содержащий все переходные зависимости без вашего.jar / классы.

...