Eclipse + Maven + Dynamic Web Project -> Maven перезаписывает сборку развертывания - PullRequest
17 голосов
/ 02 апреля 2012

Резюме

В Eclipse, когда я "Maven-> Обновить конфигурацию проекта", "Maven Dependencies" удаляется из "Deployment Assembly" моего проекта.

Детали

Я начал с предварительно настроенного проекта Eclipse: File-> New-> Dynamic Web Project-> JavaServer Face v2.0 Project. Чтобы удалить «магию», я затем преобразовал ее в проект Maven: Configure-> Convert to Maven project.

pom.xml содержит следующее:

<build>
    <finalName>jsf-facelets-tutorial</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>WebContent/WEB-INF/web.xml</webXml>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>2.0.5</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version>2.0.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

Затем, чтобы убедиться, что зависимости Maven скопированы в «WEB-INF / lib /» перед развертыванием, Я добавил их в «Сборку развертывания» проекта: Свойства проекта-> Сборка развертывания. Для получения дополнительной информации см. Этот вопрос: Eclipse + Maven + JavaServer Faces -> ClassNotFoundException: StartupServletContextListener .

Я знаю, что есть две проблемы.

Проблемы

(1) Когда я "Project-> Maven-> Обновить конфигурацию проекта", "Maven Dependencies" удаляется из моей "Сборки развертывания". Есть ли способ предотвратить это, возможно, с помощью какого-нибудь плагина Maven?

(2) Когда я собираю .war из Eclipse, все в порядке, .war отлично работает в Tomcat. Но когда я собираю его из командной строки с Maven, mvn clean compile war:war, файлы .html из "WebContent /" не добавляются в .war. Опять же, какие настройки / плагины Maven мне нужны, чтобы исправить это?

К вашему сведению, это очень простое приложение ... просто страница входа и страница приветствия.

Если есть какие-либо дополнительные сведения, которые я должен предоставить (web.xml, face-config-xml, login.xhtml), дайте мне знать, и я добавлю их.

Спасибо

- EDIT -

Версия Eclipse: 3.6.2

Eclipse m2e версия: 1.0.1

Apache Maven версия: 2.2.1

(1) Решение

Обновлено до Eclipse Java EE 3.7.2 (Индиго). Теперь также используется плагин m2e-wtp Maven Integration для Eclipse WTP

(2) Решение

Создан новый проект Maven из архетип , затем Eclipse-> Import-> Existing Maven Project. С новой версией Eclipse и m2e-wtp перспектива Java EE в Eclipse хорошо работает со стандартной структурой каталогов Maven

pom.xml теперь также стал проще:

<build>
    <finalName>jsf-facelets-tutorial</finalName>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>javax.el</groupId>
        <artifactId>el-api</artifactId>
        <version>1.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.0</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-api</artifactId>
        <version>2.0.5</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.myfaces.core</groupId>
        <artifactId>myfaces-impl</artifactId>
        <version>2.0.5</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

1 Ответ

4 голосов
/ 02 апреля 2012

Я бы порекомендовал перейти на Eclipse 3.7.x (Indigo), которая имеет лучшую поддержку m2e , а также позволяет использовать Maven Integration для WTP (отдельная установка ), который должен сделать вещи намного проще. Я думаю, что большинство ваших проблем должны быть решены путем обновления до Индиго.

Ссылка для установки: http://marketplace.eclipse.org/node/96737

Также см. Здесь: Проекты Maven / Tomcat In Eclipse Indigo / 3.7

Редактировать Поместите ваши веб-ресурсы в WebContent , а затем добавьте их в качестве каталога в плагин WAR, что может стать решением. Чистым способом было бы иметь их под src/main/resources или src/main/webapp, и они должны автоматически включаться в файл WAR. WebContent не является одним из стандартных каталогов Maven.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...