Установите источник данных по умолчанию в OpenLiberty с помощью плагина maven.

Я пытался установить DefaultDataSource для openliberty 20.0.0.1.

src/liberty/config/server.xml:

<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">

    <!-- Enable features -->
    <featureManager>
        <feature>javaee-8.0</feature>
    </featureManager>

    <!-- This template enables security. To get the full use of all the capabilities, a keystore and user registry are required. -->

    <!-- For the keystore, default keys are generated and stored in a keystore. To provide the keystore password, generate an 
         encoded password using bin/securityUtility encode and add it below in the password attribute of the keyStore element. 
         Then uncomment the keyStore element. -->
    <!--
    <keyStore password=""/> 
    -->

    <!--For a user registry configuration, configure your user registry. For example, configure a basic user registry using the
        basicRegistry element. Specify your own user name below in the name attribute of the user element. For the password, 
        generate an encoded password using bin/securityUtility encode and add it in the password attribute of the user element. 
        Then uncomment the user element. -->
    <basicRegistry id="basic" realm="BasicRealm"> 
        <!-- <user name="yourUserName" password="" />  --> 
    </basicRegistry>

    <!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
    <httpEndpoint id="defaultHttpEndpoint"
                  httpPort="9080"
                  httpsPort="9443" />

    <!-- Automatically expand WAR files and EAR files -->
    <applicationManager autoExpand="true"/>

    <!-- Derby Library Configuration -->    
    <library id="derbyJDBCLib">
      <fileset dir="${shared.resource.dir}" includes="derby*.jar"/>
    </library>

    <!-- Datasource Configuration -->
    <!-- remove jndiName="" to serve java:comp/DefaultDataSource for Java EE 7 or above -->
    <dataSource id="DefaultDataSource">
      <jdbcDriver libraryRef="derbyJDBCLib" />
      <properties.derby.embedded databaseName="taskdb" createDatabase="create"/>
    </dataSource>

</server>

А liberty-maven-plugin настраивается в pom.xml.

 <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>org.apache.derby</groupId>
                                    <artifactId>derby</artifactId>
                                    <version>10.14.2.0</version>
                                    <type>jar</type>
                                    <overWrite>false</overWrite>
                                </artifactItem>
                            </artifactItems>
                            <outputDirectory>${project.build.directory}/liberty/wlp/usr/shared/resources</outputDirectory>
                        </configuration>                                    
                    </plugin>             
                    <!-- Enable liberty-maven-plugin -->
                    <plugin>
                        <groupId>io.openliberty.tools</groupId>
                        <artifactId>liberty-maven-plugin</artifactId>
                        <version>3.1</version>
                        <configuration>
                            <libertyRuntimeVersion>20.0.0.1</libertyRuntimeVersion>
                        </configuration>
                    </plugin>

Я использую maven-dependency-plugin, чтобы скопировать derby в ${project.build.directory}/liberty/wlp/usr/shared/resources.

Но когда я запускаю mvn clean liberty:run -Popenliberty. Я обнаружил, что сначала копируется дерби, затем цель liberty:run удалит target/liberty, как запретить плагину Liberty maven удалить эту папку?

Я использовал профиль Maven openliberty для сервера Liberty, проверьте полные коды.


person Hantsy    schedule 29.01.2020    source источник
comment
в качестве временного решения вы можете поместить загруженную версию Derby .jar в свою папку src/main/config/liberty.   -  person rieckpil    schedule 30.01.2020


Ответы (2)


Похоже, вы запускаете команду mvn clean liberty:run -Popenliberty после предыдущего вызова сборки, который выполняет компиляцию приложения, военную упаковку и т. д. Запустив фазу clean в предоставленной вами команде, Maven удалит папку target и, таким образом, вывод любых предыдущих вызовов. Это не связано с поведением плагина Liberty Maven.

В репозитории плагинов Liberty Maven есть открытая проблема для поддержки копирования зависимостей. в общий каталог ресурсов.

В качестве обходного пути вы можете сделать:

mvn clean install liberty:create dependency:copy liberty:run -Popenliberty

Таким образом, LMP создаст сервер, затем скопирует зависимость Derby, а затем запустит сервер на переднем плане.

person Charles    schedule 29.01.2020
comment
dependency-maven-plugin сначала копирует derby в ${project.build.directory}/liberty/wlp/usr/shared/resources, затем liberty:run удалит ${project.build.directory}/ Liberty и создайте openlibery в ${project.build.directory}/liberty, это не имеет отношения к цели Maven clean. - person Hantsy; 30.01.2020
comment
Это верно, подключаемый модуль Liberty Maven использует маркер установки, чтобы определить, была ли установлена ​​среда выполнения. Это приведет к переустановке среды выполнения, если она не обнаружит существующий маркер установки или он устарел. Это удалит все, что уже находится в каталоге времени выполнения. Предоставленный обходной путь должен работать для вас. - person Charles; 30.01.2020
comment
Хотя использование плагина зависимостей было лучшим решением в то время, ответ от @ltlBeBoy использует поддержку «copyDependencies», добавленную в плагин Liberty-maven. Обычно это лучшее решение, поскольку оно интегрировано в цикл режима разработки и менее подробно (за счет поддержки меньшего количества опций, чем плагин зависимостей). - person Scott Kurz; 27.07.2021

Начиная с версии 3.3 модуля Liberty Maven Plug- в есть параметр 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 13.07.2021