2016-09-28 3 views
0

Добрый день.Maven. Развернитесь на стеклянную рыбку с модулями

Я использую «mvn clear package glassfish: deploy» из cmd для развертывания. Это нормально для приложения, которое включает только проект. Но с дочерними модулями у меня есть проблемы с развертыванием.

Эта команда дает мне эту ошибку:

[Ошибка] удаленный отказ: Файл не найден: [здесь проект путь] \ цель \ test2.war

[Ошибка] Развертывание [здесь путь проекта] \ target \ test2.war failed

Как это исправить?

Родителя 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 П:

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

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

ответ

0

Проблема с ниже коды в родительском pom.xml

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

Ваш родительский pom в основном производит артефакт с типом pom.
<artifact>target/${project.build.finalName}.war</artifact> пытается развернуть файл с именем test2.war, потому что ${project.build.finalName}.war в строку "test2.war". Но test2.war отсутствует в целевом каталоге. Файл, который присутствует в целевом каталоге, - test2.pom. Следовательно, вы получаете ошибку.
Существует два способа развертывания ваших артефактов.

Первый подход: Если вы хотите развернуть дочерние модули из родительских модулей, то вам нужно иметь код ниже для плагина glashfish в родительском помпе.

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

Второй подход (который я думаю, что лучше) будет переместить Maven плагин GlassFish от родительского модуля к модулю ребенка.
Замените код плагина в виде пламени maven в своих детских помпах, как показано ниже.
Для 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> 

Для ребенка 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> 

Не забудьте удалить Maven GlassFish код плагина из родительского ПОМ.

+0

Спасибо вам за ответ. Но для развертывания с использованием второго подхода команда развертывания должна выполняться отдельно для каждого ребенка? Причина при выполнении этого в родительском pom У меня есть ошибка, что «glassfish» является неправильным префикс – Evgeniy175

+0

Для второго подхода вам не нужно указывать команду deploy. Попробуйте использовать команду 'mvn clean install' на уровне родительского уровня. Это связано с тем, что материал, связанный с развертыванием, будет заботиться о коде плагина в ваших пемах. Кроме того, вам не нужно использовать команду deploy отдельно для каждого модуля. Ваш родительский pom спровоцирует ребенка poms один за другим, который будет разворачивать дочерние артефакты. Попробуйте приведенную выше команду и сообщите мне. –

+0

Он успешно скомпилирован, дочерние модули теперь содержат «цель» папок. Но без развертывания на стеклянную рыбку – Evgeniy175

0

Попытка переместить GlassFish-Maven-плагин под строительство -> pluginManagement под родительским ПОМ:

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

Затем внутри каждого из дочерних POMS, добавьте этот плагин вызов:

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

И снова, файл не найден. – Evgeniy175

Смежные вопросы