Используя Знатока для развертывания

Едва ли.

Вы изменяете глубинную структуру таблицы, в конце концов, и это - немного информации, это довольно важно для базовой системы. Вы также (вероятно), перемещаете большую часть данных вокруг по диску.

, Если Вы планируете выполнение этого много, Вы более обеспечены просто дополнение таблицы с "фиктивными" столбцами, которые доступны для будущего использования.

21
задан Rich Seller 10 September 2009 в 16:41
поделиться

3 ответа

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

Определите профиль в каждом проекте с тем же именем (скажем, «опубликовать»). В этом профиле вы можете определить конфигурацию для использования плагина antrun для доставки файлов по FTP (см. Ниже).

В родительском проекте у вас будет элемент модулей, определяющий каждый проект как модуль. Если вы запустите mvn install -P publish , каждый проект будет построен по очереди с включенным профилем публикации, а последний артефакт будет опубликован в целевой системе на этапе установки. Если вам нужно развернуть дополнительные файлы, измените соответствующим образом элемент include .

Обратите внимание, что параметры для задачи FTP были установлены как свойства, это позволяет их переопределить из командной строки и / или унаследовано от родительского POM.

<profiles>
  <profile>
    <id>publish</id>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <executions>
        <execution>
          <id>ftp</id>
          <phase>install</phase>
          <configuration>
            <tasks>
              <ftp action="send" 
                  server="${ftp.host}" remotedir="${ftp.remotedir}" 
                  userid="${ftp.userid}" password="${ftp.password}" 
                  depends="${ftp.depends}" verbose="${ftp.verbose}">
                <fileset dir="${project.build.directory}">
                  <include 
                    name="${project.build.finalName}.${project.packaging}"/>
                </fileset>
              </ftp>
            </tasks>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
      <dependencies>
        <dependency>
          <groupId>commons-net</groupId>
          <artifactId>commons-net</artifactId>
          <version>1.4.1</version>
        </dependency>
        <dependency>
          <groupId>ant</groupId>
          <artifactId>ant-commons-net</artifactId>
          <version>1.6.5</version>
        </dependency>
        <dependency>
          <groupId>ant</groupId>
          <artifactId>ant-nodeps</artifactId>
          <version>1.6.5</version>
        </dependency>
      </dependencies>
    </plugin>
    <properties>
      <ftp.host>hostname</ftp.host>
      <ftp.remotedir>/opt/path/to/install</ftp.remotedir>
      <ftp.userid>user</ftp.userid>
      <ftp.password>mypassword</ftp.password>
      <ftp.depends>yes</ftp.depends>
      <ftp.verbose>no</ftp.verbose>          
    </properties>
  </profile>
</profiles>

Обновление: на основе вашего комментария: вы можете использовать плагин зависимостей для загрузки каждой зависимости, за исключением того, что родитель не может иметь зависимости от дочернего элемента, и он будет построен до дочернего. Это должен быть другой проект. вам также нужно где-то иметь информацию о том, где их развернуть. В настоящий момент у вас есть целевая информация в отдельных проектах, поэтому она недоступна в проекте развертывания.

Используя этот подход, вы можете определить несколько профилей в новом проекте, по одному для каждого артефакта. Каждый профиль определяет зависимость: выполнение копирования для получения jar-файла и выполнение antrun для одного из проектов. Общую конфигурацию (например, зависимости для плагина antrun) можно извлечь из профилей. Также имейте в виду, что свойства будут объединены, если вы определите несколько профилей, поэтому вам может потребоваться квалифицировать их с помощью имени артефакта, например ftp.artifact1.host .

<profiles>
  <profile>
    <id>deploy-artifact1</id>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-dependency-plugin</artifactId>
      <executions>
        <execution>
          <id>copy-dependency</id>
          <phase>prepare-package</phase>
          <goals>
            <goal>copy</goal>
          </goals>
          <configuration>
            <artifactItems>
              <artifactItem>
                <groupId>name.seller.rich</groupId>
                <artifactId>artifact1</artifactId>
                <version>1.0.0</version>
                <type>jar</type>
                <overWrite>false</overWrite>
              </artifactItem>
            </artifactItems>
            <outputDirectory>${project.build.directory}/deploy-staging</outputDirectory>
            <overWriteReleases>false</overWriteReleases>
          </configuration>
        </execution>
      </executions>
    </plugin>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-antrun-plugin</artifactId>
      <executions>
        <execution>
          <id>ftp</id>
          <phase>install</phase>
          <configuration>
            <tasks>
              <ftp action="send" 
                  server="${ftp.host}" remotedir="${ftp.remotedir}" 
                  userid="${ftp.userid}" password="${ftp.password}" 
                  depends="${ftp.depends}" verbose="${ftp.verbose}">
                <fileset dir="${project.build.directory} includes="deploy-staging/"/>
              </ftp>
            </tasks>
          </configuration>
          <goals>
            <goal>run</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
    <properties>
      <!--if the properties differ between targets, qualify them with the artifact name-->
      <ftp.host>hostname</ftp.host>
      <ftp.remotedir>/opt/path/to/install</ftp.remotedir>
      <ftp.userid>user</ftp.userid>
      <ftp.password>mypassword</ftp.password>
      <ftp.depends>yes</ftp.depends>
      <ftp.verbose>no</ftp.verbose>          
    </properties>
  </profile>
</profiles>  
14
ответ дан 29 November 2019 в 21:54
поделиться

I would look at using the maven-assembly-plugin to do this.

Something like this can be used to grab the files from the child projects and stuff them in output directories.

<assembly>
  <id>xyzzy</id>
  <formats>
   <format>zip</format>
  </formats>
  <fileSets>
   <fileSet>
      <directory>../subproject1/target/</directory>
      <outputDirectory>/foo</outputDirectory>
      <includes>
        <include>*.jar</include>
      </includes>
   </fileSet>
   <fileSet>
      <directory>../subproject1/target/html-output/</directory>
      <outputDirectory>/foo</outputDirectory>
      <includes>
        <include>*.html</include>
        <include>*.js</include>
        <include>*.css</include>
      </includes>
    </fileSet>     
    <fileSet>
      <directory>../subproject2/target/</directory>
      <outputDirectory>/bar</outputDirectory>
      <includes>
        <include>**/**</include>
      </includes>
      <excludes>
        <exclude>**/*.exclude-this</exclude>
      </excludes>
    </fileSet>
  </fileSets> 
</assembly>
0
ответ дан 29 November 2019 в 21:54
поделиться

Maven на самом деле не предназначен для развертывания jar-файлов в удаленном месте; его основное использование - компиляция и упаковка артефактов. Цели сборки и зависимости в основном используются для сбора зависимостей и файлов для упаковки в артефакт.

Сказав это, у maven действительно есть цель развертывания, которая использует компонент под названием wagon. Это в первую очередь предназначено для развертывания в репозитории maven. Существует плагин Cargo, который можно использовать для развертывания артефактов на удаленном сервере, но он сам по себе не взрывает содержимое jar-файла (для всего этого он полагается на целевой сервер приложений). Возможно, вы сможете расширить функциональность Maven Wagon самостоятельно.

Кроме того, можно упаковать собственный жизненный цикл, но это входит в некоторые довольно низкоуровневые maven mojo (каламбур).

0
ответ дан 29 November 2019 в 21:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: