2016-07-03 4 views
2

Я пытаюсь преобразовать мультимодульный проект в wildfly-swarm. Однако я не знаю, как правильно настроить его.Многофункциональный проект Maven с плагином wildfly-swarm

Когда я запустил mvn wildfly-swarm:run из основного каталога, он запустил сервер, и ошибка говорит, что он не находит мою систему сохранения. persistence.xml находится в модуле DBlayer, поэтому имеет смысл.

Я попытался запустить его из корневого каталога, но он говорит, что рой плагина не определен. Поэтому я попытался определить плагин в файле pom.xml root вместомодуля pom.xml, но создать -swarm.jar невозможно.

Как я могу настроить его?

Это мой корень pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 

    <modelVersion>4.0.0</modelVersion> 

    <groupId>xxx</groupId> 
    <artifactId>x</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <properties> 
     <version.wildfly.swarm>1.0.0.Final</version.wildfly.swarm> 
     <maven.compiler.source>1.8</maven.compiler.source> 
     <maven.compiler.target>1.8</maven.compiler.target> 
     <failOnMissingWebXml>false</failOnMissingWebXml> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      <dependency> 
       <groupId>org.wildfly.swarm</groupId> 
       <artifactId>bom</artifactId> 
       <version>${version.wildfly.swarm}</version> 
       <scope>import</scope> 
       <type>pom</type> 
      </dependency> 
     </dependencies> 
    </dependencyManagement> 

    <modules> 
     <module>backgroundServices</module> 
     <module>core</module> 
     <module>DBLayer</module> 
     <module>userArea</module> 
    </modules> 

    <dependencies>  
     <!-- Java EE 7 dependency --> 
     <dependency> 
      <groupId>javax</groupId> 
      <artifactId>javaee-api</artifactId> 
      <version>7.0</version> 
      <scope>provided</scope> 
     </dependency> 
     <!-- Wildfly Swarm Fractions --> 
     <dependency> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>cdi</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>jpa-mysql</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>jsf</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>keycloak</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>logging</artifactId> 
     </dependency> 
    </dependencies> 
</project> 

Затем я добавил к core.xml:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.wildfly.swarm</groupId> 
      <artifactId>wildfly-swarm-plugin</artifactId> 
      <version>${version.wildfly.swarm}</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>package</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

ядро ​​POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 

    <parent> 
     <groupId>xxx</groupId> 
     <artifactId>x</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 

    <modelVersion>4.0.0</modelVersion> 

    <artifactId>core</artifactId> 

    <packaging>war</packaging> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
      </plugin> 
       <plugin> 
        <groupId>org.wildfly.swarm</groupId> 
        <artifactId>wildfly-swarm-plugin</artifactId> 
        <version>${version.wildfly.swarm}</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>package</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
     </plugins> 
    </build> 


    <dependencies> 
     <dependency> 
      <groupId>xxx</groupId> 
      <artifactId>DBLayer</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>xxx</groupId> 
      <artifactId>backgroundServices</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
     </dependency> 
    </dependencies> 
</project> 

DBlayer POM:

<project xmlns="http://maven.apache.org/POM/4.0.0" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <parent> 
     <groupId>xxx</groupId> 
     <artifactId>x</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <packaging>jar</packaging> 

    <artifactId>DBLayer</artifactId> 
</project> 

Однако я не указал никакого основного метода. Просто у меня persistence.xml в DBLayer под:

DBLayer/SRC/главная/ресурсы/META-INF

Так что я своего рода предполагающие, что рой заботится автоматически определить драйвер и источник данных. Я имею в виду, что в wildfly full вы должны определить драйвер и источник данных в файле standalone.xml. Здесь я ничего не сделал, так что, возможно, это на самом деле проблема. Однако в их примере они тоже этого не делают. https://github.com/wildfly-swarm/wildfly-swarm-examples/blob/master/jpa/jpa-war/src/main/resources/META-INF/persistence.xml

Вот моя настойчивость блок:

<persistence version="2.1" 
    xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 

    <persistence-unit name="my-pu" transaction-type="JTA"> 
     <jta-data-source>java:/walbangDbDS</jta-data-source> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <shared-cache-mode>DISABLE_SELECTIVE</shared-cache-mode> 

     <properties> 
      <!--<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>--> 
      <!--<property name="javax.persistence.sql-load-script-source" value="sql_scripts/loading_script.sql"/>--> 
      <property name="hibernate.enable_lazy_load_no_trans" value="true"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

ответ

1

В Maven проекта мульти-модуль, не забудьте запустить Maven команды из корневой POM.

Прежде всего, сохраните декларацию wildfly-swarm-plugin внутри модуля WAR, было бы неуместно иметь его в другом месте, поскольку оно относится к проекту WAR. Затем вам необходимо установить модуль DBLayer, чтобы его можно было видеть в модуле core (который является вашей ВОЙНОЙ) (и, следовательно, может видеть его persistence.xml). Наконец, вы должны убедиться, что вы используете цель wildfly-swarm:run только в модуле WAR с помощью переключателя командной строки -pl.

Таким образом, из корневой POM, вызовите команду:

mvn clean install && mvn -pl core wildfly-swarm:run 

Это будет правильно строить свой проект из нескольких модулей и запустить WAR с Wildfly Swarm Plugin. Вы можете найти рабочий пример такой настройки on this GitHub repo.

+0

Я не читал stacktrace достаточно хорошо, Мой плохой, что не делал этого. но я на что-то думаю – Ced

+0

@Ced Является ли источник данных правильно создан в автономном режиме.xml'? У вас есть 'faces-config.xml' (я вижу, вы используете зависимость JSF)? По крайней мере, с минимальной настройкой, удаление 'jta-data-source',' exclude-unlisted-classes' и 'shared-cache-mode' в' persistence.xml' заставляет WAR запускаться нормально. – Tunaki

+0

Нет. Я не помещал какой-либо standalone.xml в любом месте, поэтому мой пароль и пользователь для доступа к mysql нигде не определены, ни мой источник данных (ни они в документе/примерах). Насколько я понимаю, это невозможно сделать с военным файлом, потому что он использует пример данных DataSource по умолчанию. Поэтому я теперь пытаюсь развернуть его как .jar, но я думаю, что он не может автоматически обнаружить фракции (jsf и т. Д.), Поэтому похоже, что ему нужна тяжелая настройка, чтобы определить источник данных. – Ced