Подтвердить что ты не робот

Maven: как скопировать артефакт в конкретный каталог?

Цель "установить" копирует артефакт в целевой каталог и в локальный репозиторий.

Как я могу сообщить Maven, чтобы он скопировал его также в заданный каталог (например, в каталог развертывания JBoss).

4b9b3361

Ответ 1

Цель copy maven-dependency-plugin делает то, что вы хотите, см. example.

Однако не рекомендуется копировать что-либо вне вашего целевого каталога (или ${project.build.directory}, если быть точным) - особенно если такое действие связано с фазой сборки, поскольку оно вводит неожиданные побочные эффекты сборки и иногда даже потери воспроизводимости.

Как отмечает @Andreas_D, есть более эффективная альтернатива для развертывания JBoss; аналогично для развертывания в других приложениях.

Ответ 2

В соответствии с http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html вы можете скопировать только что созданный артефакт в конкретный каталог:

<project>
    [...]
    <build>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>copy-installed</id>
              <phase>install</phase>
              <goals>
                <goal>copy</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <type>${project.packaging}</type>
                  </artifactItem>
                </artifactItems>
                <outputDirectory>some-other-place</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
    [...]
  </project>

Ответ 3

Если вы хотите скопировать файл на веб-сервер (локальный или удаленный), вы можете использовать плагин загрузки Maven:

                <plugin>
                    <groupId>com.atlassian.maven.plugins</groupId>
                    <artifactId>maven-upload-plugin</artifactId>
                    <version>1.1</version>
                    <configuration>
                        <resourceSrc>
                            ${project.build.directory}/${project.build.finalName}.${project.packaging}
                        </resourceSrc>
                        <resourceDest>${jboss.deployDir}</resourceDest>
                        <serverId>${jboss.host}</serverId>
                        <url>${jboss.deployUrl}</url>
                    </configuration>
                </plugin>

И для настройки параметров интеллектуальным способом я использую профили maven:

<profiles>
    <!-- local deployment -->
    <profile>
        <id>developpement</id>
        <properties>
            <jboss.host>localhost</jboss.host>
            <jboss.deployDir>appli/jboss-4.0.4.GA/server/default/deploy/</jboss.deployDir>
            <jboss.deployUrl>file://C:/</jboss.deployUrl>
        </properties>
    </profile>
    <!-- distant deployment -->
    <profile>
        <id>validation</id>
        <properties>
            <jboss.host>ENV_val</jboss.host>
            <jboss.deployDir>/home/envval/jboss/server/default/deploy/</jboss.deployDir>
            <jboss.deployUrl>scp://PROJECT_LAN_HOST</jboss.deployUrl>
        </properties>
    </profile>
</profiles>

Я создал "ant launcher", чтобы использовать его, щелкнув под Eclipse ant view:

<target name="copy war to JBoss local" description="Copy war to local JBoss">
    <maven goal="upload:upload" options="-Pdeveloppement" />
</target>

Но вы можете просто запустить его в командной строке:

mvn upload:upload -Pdeveloppement

Кстати, для удаленного развертывания вам может понадобиться пароль для входа в scp для работы. Вы должны добавить их в файл Maven settings.xml:

<settings>
  ...
  <servers>
    <server>
      <id>ENV_val</id>
      <username>login</username>
      <password>password</password>
    </server>
  </servers>
  ...
</settings>

Ответ 4

Лучший подход - использовать плагин, который будет фактически развертывать ваше приложение, например cargo или jboss-maven plugin (кредит для @Andreas_D для этого).

Это будет лучший подход к использованию копировального или универсального средства загрузки, поскольку развертывание - это то, что вы на самом деле пытаетесь сделать.

С плагином для загрузки вы можете развернуть на множество запущенных серверов. Мы использовали этот подход для тестирования локально в причале, используя планер причала во время сборки и имели профиль для развертывания для кота по запросу через груз.

Примечание. Если у вас установлен целевой сервер (JBOSS) локально в блоке dev, вы также можете использовать груз для запуска/остановки вашего сервера во время процесса сборки. Недостатком этого подхода является то, что вам понадобится ссылка на его местоположение в файле pom, так что либо все разработчики устанавливают его в том же месте, либо в системное свойство, которое определяет, где оно расположено (аналогично JAVA_HOME).