Как создать исполняемый jar с maven, который включает зависимости в отдельной папке "lib" (не uber jar) - PullRequest
4 голосов
/ 12 февраля 2012

Я пытаюсь использовать Maven для создания исполняемого файла JAR, который включает в себя зависимости в отдельном каталоге. Я видел много вопросов на SO о создании «uberjar» - я этого не хочу. Я хочу, чтобы зависимости были скопированы в каталог lib следующим образом (и файл jar MANIFEST.MF с записью ClassPath, указывающей на них):

/myApp
  myApp.SNAPSHOT-1.0.jar
  /lib
    hibernate.jar
    log4j.jar
    ...

В качестве дополнительного бонуса было бы неплохо, если бы я мог скопировать /src/main/resources/* в /myApp/conf и затем сжать весь каталог /myApp в myApp.zip.

РЕДАКТИРОВАТЬ: я использую плагин maven-dependency-plugin и maven-resources-plugin и maven-jar-plugin. Это то, что я включаю в мой pom.xml (который копирует зависимости времени выполнения в / target / release / lib, чтобы я мог заархивировать / target / release и он готов к работе):

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <includeScope>runtime</includeScope>
                <outputDirectory>
                    ${project.build.directory}/release/lib
                </outputDirectory>
             </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <executions>
      <execution>
        <id>copy-resources</id>
        <!-- here the phase you need -->
        <phase>package</phase>
        <goals>
          <goal>copy-resources</goal>
        </goals>
        <configuration>
          <outputDirectory>${project.build.directory}/release</outputDirectory>
          <resources>          
            <resource>
              <directory>src/main/config</directory>
              <filtering>true</filtering>
            </resource>
          </resources>              
        </configuration>            
      </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <outputDirectory>
                    ${project.build.directory}/release/lib
                </outputDirectory>
             </configuration>
        </execution>
    </executions>
</plugin>

1 Ответ

5 голосов
/ 12 февраля 2012

Плагин зависимостей maven имеет цель копирования-зависимости, которая должна делать то, что вы хотите.

mvn dependency:copy-dependencies

См. здесь для доступных опций. А именно 'outputDirectory', чтобы скопировать зависимости в / lib

...