Как создать работающую банку с maven, которая включает зависимости в отдельной папке lib (не в банке uber)

Я пытаюсь использовать 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>

person Jason Wheeler    schedule 11.02.2012    source источник


Ответы (1)


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

mvn dependency:copy-dependencies

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

person Greg Leaver    schedule 11.02.2012
comment
Хм, прикольно, я не знал об этом. Но как мне обновить файл манифеста моей банки, чтобы использовать это местоположение для пути к классам? - person Jason Wheeler; 12.02.2012
comment
Как насчет настройки манифеста? И, конечно же, используйте свойства или переменные maven. - person dma_k; 13.02.2012