В Grails команда tomcat:deploy не создает полную войну, как это делает команда dev war.

Команда "grails dev war" отлично развертывается на моем локальном сервере Tomcat6 со сгенерированной войной, которая содержит следующие папки:

css
images
js
META-INF
plugins
WEB-INF

К сожалению, мне нужно, чтобы команда tomcat:deploy тоже работала (на самом деле я использую: tomcat:redeploy -DskipTests). Но Tomcat выдает следующую ошибку:

2013-05-23 05:12:53,094 [http-8080-4] ERROR digester.Digester  - Parse Fatal Error at line 1 column 1: Final de archivo prematuro.
org.xml.sax.SAXParseException; systemId: jndi:/localhost/Alojamiento/WEB-INF/web.xml; lineNumber: 1; columnNumber: 1; Final de archivo prematuro.
    at

Я добавил пустой файл web.xml для компиляции maven. В сгенерированной войне тоже пусто. Так что это, вероятно, причина проблемы («grails dev war» генерирует файл web.xml с кодом). Кроме того, сгенерированная война содержит только следующие папки:

META-INF
WEB-INF

Чтобы иметь возможность использовать «развертывание tomcat», я добавил следующий код в pom.xml (после добавления pom true, запуска «create-pom group» и других изменений конфигурации):

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>tomcat-maven-plugin</artifactId>
    <configuration>
        <url>http://127.0.0.1:8080/manager</url>                    
        <server>TomcatServer</server>
    </configuration>
</plugin>

ОБНОВЛЕНИЕ 1 Мой полный файл pom.xml:

<?xml version="1.0" encoding="utf-8"?>
<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>alojamiento.ingenierosIW</groupId>
    <artifactId>Alojamiento</artifactId>
    <packaging>war</packaging>
    <version>0.1</version>
    <name>Alojamiento</name>
    <description>Alojamiento</description>

    <properties>
        <grails.version>2.2.2</grails.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.grails</groupId>
            <artifactId>grails-dependencies</artifactId>
            <version>${grails.version}</version>
            <type>pom</type>
        </dependency>


        <dependency>
            <groupId>org.grails</groupId>
            <artifactId>grails-test</artifactId>
            <version>${grails.version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.grails</groupId>
            <artifactId>grails-plugin-testing</artifactId>
            <version>${grails.version}</version>
            <scope>test</scope>
        </dependency>


    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.25</version>
        <scope>runtime</scope>

    </dependency>


        <dependency>
            <groupId>org.grails.plugins</groupId>
            <artifactId>tomcat</artifactId>
            <version>${grails.version}</version>
            <scope>provided</scope>
            <type>zip</type>
        </dependency>

    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>spring-security-core</artifactId>
        <version>1.2.7.3</version>
        <scope>compile</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>cache</artifactId>
        <version>1.0.1</version>
        <scope>compile</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>resources</artifactId>
        <version>1.2.RC2</version>
        <scope>runtime</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>db-reverse-engineer</artifactId>
        <version>0.5</version>
        <scope>runtime</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>jquery</artifactId>
        <version>1.8.3</version>
        <scope>runtime</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>database-migration</artifactId>
        <version>1.3.2</version>
        <scope>runtime</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>hibernate</artifactId>
        <version>2.2.2</version>
        <scope>runtime</scope>
        <type>zip</type>
    </dependency>


    <dependency>
        <groupId>org.grails.plugins</groupId>
        <artifactId>tomcat</artifactId>
        <version>2.2.2</version>
        <scope>provided</scope>
        <type>zip</type>
    </dependency>



    </dependencies>

    <build>
        <pluginManagement />

        <plugins>
            <!-- Disables the Maven surefire plugin for Grails applications, as we have our own test runner -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>surefire-it</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>test</goal>
                        </goals>
                        <configuration>
                            <skip>false</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>plugins</directory>
                            <includes>
                                <include>**/*</include>
                            </includes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.grails</groupId>
                <artifactId>grails-maven-plugin</artifactId>
                <version>${grails.version}</version>
                <configuration>
                    <!-- Whether for Fork a JVM to run Grails commands -->
                    <fork>true</fork>
                </configuration>
                <extensions>true</extensions>
            </plugin>


             <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>tomcat-maven-plugin</artifactId>
                <configuration>
                    <!--<ignorePackaging>true</ignorePackaging>-->
                    <addContextWarDependencies>true</addContextWarDependencies>
                    <url>http://127.0.0.1:8080/manager</url>                    
                    <server>TomcatServer</server>
                    <!--<username>admin</username>-->
                    <!-- <password>password</password>-->
                    <!-- <path>/u74937912-practica-WAR</path>-->
                </configuration>
          </plugin>


        </plugins>
    </build>

    <repositories>
        <repository>
            <id>grails</id>
            <name>grails</name>
            <url>http://repo.grails.org/grails/core</url>
        </repository>
        <repository>
            <id>grails-plugins</id>
            <name>grails-plugins</name>
            <url>http://repo.grails.org/grails/plugins</url>
        </repository>
    </repositories>

    <profiles>
        <profile>
            <id>tools</id>
            <activation>
                <property>
                    <name>java.vendor</name>
                    <value>Sun Microsystems Inc.</value>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>com.sun</groupId>
                    <artifactId>tools</artifactId>
                    <version>${java.version}</version>
                    <scope>system</scope>
                    <systemPath>${java.home}/../lib/tools.jar</systemPath>
                </dependency>
            </dependencies>
        </profile>
    </profiles>
</project>

person chelder    schedule 23.05.2013    source источник
comment
Можете ли вы опубликовать свой полный pom? Похоже, что плагин tomcat для maven использует артефакт WAR, сгенерированный maven, вместо артефакта, сгенерированного плагином grails (который, как я полагаю, вы настроили в своем pom?)   -  person leebutts    schedule 23.05.2013
comment
Я обновил его с помощью pom.xml (ОБНОВЛЕНИЕ 1). Как я мог настроить его? Я на самом деле пытался узнать в Google, но безуспешно   -  person chelder    schedule 23.05.2013


Ответы (2)


Он отлично работает с этим:

КОНФИГУРАЦИЯ

Ранее, если вы используете Eclipse с плагином m2e, здесь объясняется, как настроить Eclipse, чтобы использовать с ним Tomcat: tomcat-maven-plugin: Сервер вернул код ответа HTTP: 403

Теперь нам нужен правильный файл settings.xml в C:\Users\user.m2 с тем же пользователем и паролем, что и в tomcat-users.xml. Затем нам нужно настроить наш pom.xml следующим образом:

<packaging>war</packaging>


<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<configuration>
    <url>http://127.0.0.1:8080/manager</url>   
    <!-- The next server must be the same than the one in settings.xml (at C:\Users\user\.m2): -->
    <server>TomcatServer</server>
</configuration>
</plugin>   


<plugin>
    <groupId>org.grails</groupId>
    <artifactId>grails-maven-plugin</artifactId>
    <version>${grails.version}</version>
    <extensions>true</extensions>
    <executions>
        <execution>
            <goals>
                <goal>init</goal>
                <goal>maven-clean</goal>
                <goal>validate</goal>
                <goal>config-directories</goal>
                <goal>maven-compile</goal>
                <goal>maven-test</goal>
                <goal>maven-war</goal>
                <goal>maven-functional-test</goal>
            </goals>
        </execution>
        </executions>
</plugin>

КОМАНДЫ MAVEN ДЛЯ РАЗВЕРТЫВАНИЯ:

Следующая команда получает значения конфигурации нашей базы данных из datasource.groovy — производственной среды:

  • кот: перераспределить
  • tomcat: перераспределить -DskipTests
  • Grails:война tomcat:redeploy -DskipTests

Чтобы получить значения из среды разработки, команды следующие:

  • grails:war tomcat:redeploy -Dgrails.env=разработка grails:war
  • tomcat: redeploy -Dgrails.env=development -DskipTests

Примечание 1: если мы не добавим -DskipTests (чтобы не запускать тесты перед развертыванием) и какой-то тест завершится неудачей, он не будет развернут.

Примечание 2: в eclipse (с установленным плагином m2e для maven) вы должны ввести эти команды в следующее поле:

  • Запуск - Запуск конфигураций - Сборка Maven - Цели

ОБНОВЛЕНИЕ 1

Не забудьте создать пустой файл web.xml в папке src/main/webapp/WEB-INF!

ОБНОВЛЕНИЕ 2

Не забудьте указать Grails использовать pom.xml: http://grails.org/doc/2.3.x/ref/Command%20Line/create-pom.html

person chelder    schedule 23.05.2013
comment
Я думаю, что ключевой частью является привязка плагина Grails к фазе maven-war. Вы должны принять свой собственный ответ, так как это хороший справочник по правильной конфигурации для плагина Grails. - person leebutts; 24.05.2013
comment
Конечно! Но я должен ждать 17 часов для этого;) - person chelder; 24.05.2013

Пытаться

mvn grails:war tomcat:redeploy -DskipTests

Мы надеемся, что это должно заставить Grails прикрепить правильный WAR-артефакт к сборке, чтобы пустой по умолчанию не загружался.

person leebutts    schedule 23.05.2013
comment
Спасибо, но, к сожалению, происходит та же ошибка, и сгенерированная война выглядит так же. - person chelder; 23.05.2013
comment
может быть, мне нужно вручную настроить tomcat-maven-plugin, чтобы включить все в войну? - person chelder; 23.05.2013