Maven Spring упаковка для банки - PullRequest
1 голос
/ 06 июня 2011

Мы создали jar (проект Spring), который мы включили, используя Maven в другом проекте Spring (война)

мы можем использовать это без проблем, если мы включим необходимые зависимости.

Если я хотел убедиться, что в банке есть все свои зависимости, и использовал их, как лучше всего это сделать?

Чтобы не включать зависимости, которые я пробовал при использовании подключаемого модуля maven который определенно включает файлы - но они, кажется, игнорируются, поскольку они все еще требуются в качестве зависимостей в потребляющем проекте - какие-либо предложения почему?

POM деталь для сборки плагина

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
         <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.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>

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Вы можете использовать плагин maven winstone для создания автономного исполняемого фляги со всеми зависимостями войны, фляги и т. Д ....

Добавление

<plugins>
  <plugin>
    <groupId>net.sf.alchim</groupId>
    <artifactId>winstone-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <goals>
          <goal>embed</goal>
        </goals>
        <phase>install</phase>
      </execution>
    </executions>
    <configuration>
      <filename>${project.parent.build.finalName}.jar</filename>
    </configuration>
  </plugin>
  ...
</plugins>

объединит все модули вашего приложения, войны и файлы jar, а также все необходимые зависимости в исполняемый файл jar, включающий механизм сервлета.

Это прекрасно работает, если вы предоставляете одну команду для развертывания вашей команде Ops.

Я бы посоветовал не создавать банку, которая содержит все зависимости, которые будут использоваться войной. Скорее всего, у вас будет несколько копий слегка разных версий одних и тех же классов в пути к классам. Некоторые библиотеки немного хм, ммм, темпераментны по этому поводу (на ум приходят hibernate и log4j).

Maven делает приличную работу, выясняя, какие зависимости взять, и если что-то сломается зависимость mvn: дерево делает вещи намного понятнее. Вы теряете это, когда создаете супер-банку.

Если есть веские причины для этого, я бы порекомендовал среду, в которой вы можете жестко контролировать пути к классам, такие как полноценный сервер J2EE или использование контейнера OSGi. Однако будьте осторожны с тем, что вы хотите: с этими котятами нельзя обращаться (без железных) перчаток.

0 голосов
/ 06 июня 2011

Я использую следующую конфигурацию сборки для создания jar-файла со всеми зависимостями времени выполнения:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>runnable</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...