2016-09-28 3 views
0

dar Guten Tag.Maven. Stellen Sie auf Glassfish mit Modulen

Ich benutze 'mvn clear package glassfish: deploy' von cmd für die Bereitstellung. Es ist in Ordnung für eine App, die nur ein Projekt enthält. Aber mit Kind-Modulen habe ich einige Probleme mit der Bereitstellung.

Dieser Befehl gibt mir diese Fehlermeldung:

[Fehler] Remote-Fehler an: Datei nicht gefunden: [hier Projektpfad] \ target \ test2.war

[Fehler] Bereitstellung von [hier Projektpfad] \ target \ test2.war fehlgeschlagen

Wie behebt man das?

Eltern 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>test.net</groupId> 
    <artifactId>test2</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <modules> 
    <module>child1</module> 
    <module>child2</module> 
    </modules> 
    <name>test2 Maven Webapp</name> 


    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>3.1</version> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <configuration> 
        <failOnMissingWebXml>false</failOnMissingWebXml> 
       </configuration> 
      </plugin> 

      <plugin> 
       <groupId>org.glassfish.maven.plugin</groupId> 
       <artifactId>maven-glassfish-plugin</artifactId> 
       <version>2.1</version> 
       <configuration> 
       <glassfishDirectory>${local.glassfish.home}</glassfishDirectory> 
        <user>admin</user> 
        <passwordFile>${local.glassfish.passfile}</passwordFile> 
        <domain> 
         <name>domain1</name> 
         <httpPort>8080</httpPort> 
         <adminPort>4848</adminPort> 
        </domain> 
        <components> 
         <component> 
          <name>${project.artifactId}</name> 
          <artifact>target/${project.build.finalName}.war</artifact> 
         </component> 
        </components> 
        <debug>true</debug> 
        <terse>false</terse> 
        <echo>true</echo> 
       </configuration> 
      </plugin> 

     </plugins> 
     <finalName>test2</finalName> 
    </build> 

</project> 

Child1 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/maven-v4_0_0.xsd"> 
    <parent> 
    <artifactId>test2</artifactId> 
    <groupId>test.net</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>child1</artifactId> 
    <packaging>war</packaging> 
    <name>child1 Maven Webapp</name> 

    <properties> 
    <deploy.glassfish>true</deploy.glassfish> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.glassfish.maven.plugin</groupId> 
     <artifactId>maven-glassfish-plugin</artifactId> 
     </plugin> 
    </plugins> 
    <finalName>child1</finalName> 
    </build> 
</project> 

Child2 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/maven-v4_0_0.xsd"> 
    <parent> 
    <artifactId>test2</artifactId> 
    <groupId>test.net</groupId> 
    <version>1.0-SNAPSHOT</version> 
    </parent> 
    <modelVersion>4.0.0</modelVersion> 
    <artifactId>child2</artifactId> 
    <packaging>war</packaging> 
    <name>child2 Maven Webapp</name> 

    <properties> 
    <deploy.glassfish>true</deploy.glassfish> 
    </properties> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>3.8.1</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.glassfish.maven.plugin</groupId> 
     <artifactId>maven-glassfish-plugin</artifactId> 
     </plugin> 
    </plugins> 
    <finalName>child2</finalName> 
    </build> 
</project> 

Antwort

0

Das Problem mit folgendem Code in Ihren Eltern pom.xml ist

<components> 
    <component> 
     <name>${project.artifactId}</name> 
     <artifact>target/${project.build.finalName}.war</artifact> 
    </component> 
</components> 

Ihre Elternpom produziert grundsätzlich ein Artefakt vom Typ pom.
Die <artifact>target/${project.build.finalName}.war</artifact> versucht, eine Datei mit dem Namen test2.war, weil ${project.build.finalName}.war auf die Zeichenfolge "test2.war" bereitzustellen. Aber test2.war ist nicht im Zielverzeichnis vorhanden. Die Datei, die im Zielverzeichnis vorhanden ist, ist test2.pom. Daher erhalten Sie den Fehler.
Es gibt zwei Möglichkeiten zum Bereitstellen Ihrer Artefakte.

Der erste Ansatz: Wenn Sie die untergeordneten Module innerhalb der übergeordneten Module bereitstellen möchten, müssen Sie den folgenden Code für das glashfish-Plugin in Ihrem übergeordneten Pom haben.

<components> 
    <component> 
     <artifact>path-to-your-child1-module</artifact> // something like ../child1/target/child1.war 
    </component> 
    <component> 
     <artifact>path-to-your-child2-module</artifact> // something like ../child2/target/child2.war 
    </component> 
</components> 

Der zweite Ansatz (was ich denke, ist besser) wäre Ihr Maven Plugin Glasfische aus dem übergeordneten Modul für das Kind Modul zu bewegen.
Ersetzen Sie den maven glassfish-Plugin-Code in Ihrem Kind Poms mit dem unten gezeigten.
Für child1 pom.xml:

<plugin> 
      <groupId>org.glassfish.maven.plugin</groupId> 
      <artifactId>maven-glassfish-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
      <glassfishDirectory>${local.glassfish.home}</glassfishDirectory> 
       <user>admin</user> 
       <passwordFile>${local.glassfish.passfile}</passwordFile> 
       <domain> 
        <name>domain1</name> 
        <httpPort>8080</httpPort> 
        <adminPort>4848</adminPort> 
       </domain> 
       <components> 
        <component> 
         <name>${project.artifactId}</name> 
         <artifact>target/${project.build.finalName}.war</artifact> 
        </component> 
       </components> 
       <debug>true</debug> 
       <terse>false</terse> 
       <echo>true</echo> 
      </configuration> 
     </plugin> 

    </plugins> 
    <finalName>child1</finalName> 
</build> 

Für Kind 2 pom.xml:

<plugin> 
      <groupId>org.glassfish.maven.plugin</groupId> 
      <artifactId>maven-glassfish-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
      <glassfishDirectory>${local.glassfish.home}</glassfishDirectory> 
       <user>admin</user> 
       <passwordFile>${local.glassfish.passfile}</passwordFile> 
       <domain> 
        <name>domain1</name> 
        <httpPort>8080</httpPort> 
        <adminPort>4848</adminPort> 
       </domain> 
       <components> 
        <component> 
         <name>${project.artifactId}</name> 
         <artifact>target/${project.build.finalName}.war</artifact> 
        </component> 
       </components> 
       <debug>true</debug> 
       <terse>false</terse> 
       <echo>true</echo> 
      </configuration> 
     </plugin> 

    </plugins> 
    <finalName>child2</finalName> 
</build> 

Vergessen Sie nicht den Maven Plugin-Code Glasfischen von einem Elternteil pom zu entfernen.

+0

Vielen Dank für die Antwort. Aber für die Bereitstellung mit dem zweiten Ansatz sollte deploy-Befehl getrennt für jedes Kind ausgeführt werden? Ursache bei der Ausführung in Eltern Pom ich habe den Fehler, dass 'Glassfish' ist falsches Präfix – Evgeniy175

+0

Für den zweiten Ansatz müssen Sie nicht den Befehl deploy angeben. Versuchen Sie, den Befehl 'mvn clean install' auf der übergeordneten Pom-Ebene zu verwenden. Dies liegt daran, dass das Deployment-bezogene Material durch den Plugin-Code in Ihren Poms beachtet wird. Außerdem müssen Sie den deploy-Befehl nicht für jedes Modul separat verwenden. Ihr Eltern-Pom löst nacheinander die Child-Poms aus, die die Child-Artefakte bereitstellen. Probier den obigen Befehl und lass es mich wissen. –

+0

Es ist erfolgreich kompiliert, Kind-Module enthält Ordner "Ziel" jetzt. Aber ohne auf Glassfish zu – Evgeniy175

0

Versuchen Sie, die Glassfish-Maven-Plugin unter Build zu bewegen -> pluginManagement unter Ihren Eltern pom:

<pluginManagement> 
    <plugins> 
     <plugin> 
      <groupId>org.glassfish.maven.plugin</groupId> 
      <artifactId>maven-glassfish-plugin</artifactId> 
      <version>2.1</version> 
      <configuration> 
       <glassfishDirectory>${local.glassfish.home}</glassfishDirectory> 
       <user>${local.glassfish.user}</user> 
       <passwordFile>${local.glassfish.passfile}</passwordFile> 
       <domain> 
        <name>${local.glassfish.domain}</name> 
        <httpPort>${local.glassfish.httpport}</httpPort> 
        <adminPort>${local.glassfish.adminport}</adminPort> 
       </domain> 
       <components> 
        <component> 
         <name>${project.name}</name> 
         <artifact>target/${project.name}-${project.version}.war</artifact> 
        </component> 
       </components> 
       <debug>true</debug> 
       <terse>false</terse> 
       <echo>true</echo> 
      </configuration> 
     </plugin> 
    </plugins> 

dann in jedem von Ihrem Kind Poms, hinzufügen, um diesen Plugin Aufruf:

<plugins> 
    <plugin> 
    <groupId>org.glassfish.maven.plugin</groupId> 
    <artifactId>maven-glassfish-plugin</artifactId> 
    </plugin> 
</plugins> 
+0

Und wieder, Datei nicht gefunden Fehler – Evgeniy175

Verwandte Themen