2016-07-03 3 views
2

Je suis en train de convertir un projet multi-module wildfly-essaim. Cependant, je n'ai aucune idée de comment le configurer correctement.Module multi projet Maven avec wildfly-essaim-plugin

Quand je lance mvn wildfly-swarm:run à partir du répertoire de base, il démarre le serveur et une erreur dit qu'il ne trouve pas mon unité de persistance. persistence.xml est dans le module DBlayer donc cela a du sens.

J'ai essayé de l'exécuter à partir du répertoire racine, mais il dit ne se définit pas l'essaim de plug-in. J'ai donc essayé de définir le plugin dans le pom.xml root au lieu du module pom.xml core, mais le -swarm.jar ne peut pas être créé.

Alors, comment suis-je censé le mettre en place?

Ceci est mon pom.xml racine

<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> 

J'ajouté à 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> 

noyau 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> 

Je n'ai pas précisé de méthode principale. Je viens ai un persistence.xml dans dblayer sous:

dblayer/src/main/resources/META-INF

Je suppose donc un peu cet essaim prend soin de définir automatiquement le pilote et la source de données. Ce que je veux dire, c'est que dans wildfly full, vous devez définir le pilote et la source de données dans standalone.xml. Ici, je n'ai rien fait de tout cela, alors c'est peut-être le problème. Cependant, dans leur exemple, ils ne le font pas non plus. https://github.com/wildfly-swarm/wildfly-swarm-examples/blob/master/jpa/jpa-war/src/main/resources/META-INF/persistence.xml

Voici mon unité de persistance:

<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> 

Répondre

1

Dans un projet Maven multi-modules, souvenez-vous de lancer des commandes Maven directement à partir du POM racine. Tout d'abord, gardez la déclaration wildfly-swarm-plugin à l'intérieur du module WAR, il serait inapproprié de l'avoir ailleurs, puisqu'il s'applique à un projet WAR. Ensuite, vous devez installer le module DBLayer de telle sorte que le module core (qui est votre WAR) peut le voir (et donc, peut voir sa persistence.xml). Enfin, vous devez vous assurer d'appeler l'objectif wildfly-swarm:run uniquement dans le module WAR à l'aide du commutateur de ligne de commande -pl.

En tant que tel, du POM racine, appelez la commande:

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

Cela correctement construire votre projet multi-module et exécuter la guerre avec la wildfly Swarm Plugin. Vous pouvez trouver un exemple de fonctionnement d'un tel set-up on this GitHub repo.

+0

Je n'ai pas assez lu la pile, mon mauvais qui ne l'a pas fait. mais je suis sur quelque chose que je pense – Ced

+0

@Ced La source de données est-elle correctement créée dans 'standalone.xml'? Avez-vous un 'faces-config.xml' (je vois que vous utilisez la dépendance JSF)? Au moins, avec une configuration minimale, la suppression de 'jta-data-source',' exclude-unlisted-classes' et 'shared-cache-mode' dans' persistence.xml' fait que le fichier WAR démarre correctement. – Tunaki

+0

Non, je n'ai pas mis de fichier standalone.xml n'importe où donc mon mot de passe et l'utilisateur pour accéder à mysql n'est défini nulle part, pas plus que ma source de données (ni dans le doc/examples). Autant que je comprenne ce n'est pas possible de faire avec un fichier de guerre parce qu'il utilise le dataSource ExampleDS par défaut. Donc j'essaye maintenant de le déployer comme un .jar mais je pense qu'il échoue la découverte automatique des fractions (jsf et telle) ainsi il semble qu'il ait besoin d'installation lourde juste pour définir une source de données. – Ced