Как скопировать внешнюю зависимость в Open Liberty во время сборки maven

ОБНОВЛЕНИЕ — июль 2021 г.:

Хотя принятый ответ с использованием плагина зависимостей был лучшим решением в то время, ответ от @ltlBeBoy использует поддержку «copyDependencies», добавленную в плагин Liberty-maven. Использование «copyDependencies» обычно является лучшим решением, поскольку оно интегрировано в цикл режима разработки и менее подробно (за счет поддержки меньшего количества параметров, чем плагин зависимостей).

ИСХОДНЫЙ ВОПРОС

Мне нужно скопировать derby.jar в общий каталог Open Liberty ${project.build.directory}/liberty/wlp/usr/shared/resources/. У меня есть следующая настройка в файле pom.xml:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.10</version>
  <executions>
    <execution>
      <id>copy-derby-dependency</id>
      <phase>package</phase>
      <goals>
        <goal>copy-dependencies</goal>
      </goals>
      <configuration>
        <includeArtifactIds>derby</includeArtifactIds>
        <outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources/</outputDirectory>
      </configuration>
    </execution>
  </executions>
</plugin>

и часть для настройки открытой свободы

<plugin>
    <groupId>net.wasdev.wlp.maven.plugins</groupId>
    <artifactId>liberty-maven-plugin</artifactId>
    <version>${openliberty.maven.version}</version>
    <executions>
      <execution>
        <id>package-server</id>
        <phase>package</phase>
        <goals>
          <goal>create-server</goal>
          <goal>install-apps</goal>
          <goal>package-server</goal>
        </goals>
        <configuration>
          <outputDirectory>target/wlp-package</outputDirectory>
        </configuration>
      </execution>
    </executions>
    <configuration>
      <assemblyArtifact>
        <groupId>io.openliberty</groupId>
        <artifactId>openliberty-runtime</artifactId>
        <version>${openliberty.version}</version>
        <type>zip</type>
      </assemblyArtifact>
      <configFile>src/main/liberty/config/server.xml</configFile>
      <appArchive>${project.build.directory}/${final.name}.war</appArchive>
      <packageFile>${project.build.directory}/${final.name}.jar</packageFile>
      <include>runnable</include>
      <serverName>${final.name}</serverName>
      <installAppPackages>project</installAppPackages>
      <configDirectory>${project.basedir}/src/main/liberty/server</configDirectory>
      <bootstrapProperties>
        <project.name>${final.name}</project.name>
        <jwt.issuer>https://server.example.com</jwt.issuer>
      </bootstrapProperties>
    </configuration>
</plugin>

С этой настройкой я должен дважды выполнить цель mvn package. Похоже, что при выполнении liberty-maven-plugin папка ${project.build.directory}/liberty/wlp/usr/shared/resources/ удаляется, если нет сервера Liberty под liberty/wlp/.

Журнал Maven:

[INFO] --- maven-dependency-plugin:2.10:copy-dependencies (copy-derby-dependency) @ account ---
[INFO] Copying derby-10.15.1.3.jar to /Users/anton/github/account/target/liberty/wlp/usr/shared/resources/derby-10.15.1.3.jar

and after it  
[INFO] --- liberty-maven-plugin:2.2:create-server (package-server) @ account ---
[INFO] CWWKM2110I: Uninstalling: /Users/anton/github/account/target/liberty/wlp. 

Может кто-нибудь, пожалуйста, помогите мне с этим?


person Anton Balaniuc    schedule 22.09.2019    source источник
comment
Обязательно ли выполнять оба плагина на этапе package?   -  person J Fabian Meier    schedule 22.09.2019
comment
@JFMeier, даже если я перемещаю плагины на разные фазы, liberty-maven-plugin:create-server все равно удаляет каталог ${project.build.directory}/liberty/wlp/usr/shared/resources/, созданный copy-dependencies   -  person Anton Balaniuc    schedule 22.09.2019
comment
А копировать после create-server уже поздно?   -  person J Fabian Meier    schedule 22.09.2019
comment
@JFMeier, вы правы, я решил, добавив дополнительное выполнение для liberty-maven-plugin, так что теперь у меня есть следующий порядок liberty-maven-plugin:create-serverve -> maven-dependency-plugin:copy-derby-dependency и, наконец, liberty-maven-plugin:install&package   -  person Anton Balaniuc    schedule 23.09.2019
comment
Начиная с версии 3.3 модуля Liberty Maven Plug- в есть параметр copyDependencies. См. мой ответ здесь.   -  person ltlBeBoy    schedule 13.07.2021
comment
@СкоттКурц Готово. Я беспокоился о дублирующемся содержании...   -  person ltlBeBoy    schedule 27.07.2021


Ответы (2)


Вот пример из руководства по кэшированию сеансов от OpenLiberty.io, показывающий, как это можно сделать. Пример — получение hazelcast.jar, но его можно использовать для любого jar, размещенного в maven.

https://github.com/OpenLiberty/guide-sessions/blob/master/finish/pom.xml

<!-- package hazelcast.jar -->
<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-dependency-plugin</artifactId>
     <version>3.1.1</version>
     <executions>
          <execution>
               <id>copy</id>
               <phase>package</phase>
               <goals>
                    <goal>copy</goal>
               </goals>
          </execution>
     </executions>
     <configuration>
          <artifactItems>
               <artifactItem>
                    <groupId>com.hazelcast</groupId>
                    <artifactId>hazelcast</artifactId>
                    <version>${hazelcast.version}</version>
                    <type>jar</type>
                    <overWrite>false</overWrite>
                    <outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
                    <destFileName>hazelcast.jar</destFileName>
               </artifactItem>
          </artifactItems>
          <outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
          <overWriteReleases>false</overWriteReleases>
          <overWriteSnapshots>true</overWriteSnapshots>
     </configuration>
</plugin>
person marks    schedule 23.09.2019
comment
Хотя это было лучшее решение в то время, ответ от @ltlBeBoy использует поддержку «copyDependencies», добавленную в плагин Liberty-maven. Обычно это лучшее решение, поскольку оно интегрировано в цикл режима разработки и менее подробно (за счет поддержки меньшего количества опций, чем плагин зависимостей). - person Scott Kurz; 27.07.2021

Как уже говорилось в моем другом ответе, начиная с версия 3.3 плагина Liberty Maven есть параметр copyDependencies:

pom.xml

<plugins>
  <plugin>
    <groupId>io.openliberty.tools</groupId>
    <artifactId>liberty-maven-plugin</artifactId>
    <version>3.3.4</version> 
    <configuration>
      <!-- Usually best to add configuration at the plugin level rather than trying to configure particular executions -->
      <copyDependencies>
        <dependencyGroup>
          <!-- Relative to server config directory -->
          <location>lib/global/jdbc</location>
          <dependency>
            <groupId>org.apache.derby</groupId>
            <artifactId>derby</artifactId>
          </dependency>
        </dependencyGroup>
      </copyDependencies>
    </configuration>
      ...

сервер.xml

...
<!-- Derby Library Configuration -->    
<library id="derbyJDBCLib">
  <fileset dir="${server.config.dir}/lib/global/jdbc" includes="derby*.jar"/>
</library>
...

См. документацию для получения дополнительной информации.

person ltlBeBoy    schedule 27.07.2021
comment
Могу я сделать предложение? Как правило, лучше включить <configuration> в качестве дочернего элемента Liberty-maven-plugin <plugin>, а не настраивать только выполнение, что менее гибко. Я мог бы отредактировать это, чтобы внести это изменение, если вы не возражаете. - person Scott Kurz; 27.07.2021
comment
@ScottKurz Хорошо, было бы здорово, если бы вы могли улучшить ответ. Вы профессионал. ;-) - person ltlBeBoy; 27.07.2021