Как создать веб-приложение Maven для архетипа Eclipse? - PullRequest
6 голосов
/ 24 марта 2011

У меня есть работающий или в основном работающий POM, который выбирает все и в точности только JAR-файлы, которые меня интересуют для написания приложения Facelets. Я использую m2eclipse. Когда я импортирую только что созданное Maven приложение, оно поступает чисто и более или менее, как и ожидалось, однако оно не похоже на Dynamic Web Project, поскольку при попытке его запустить не предлагает Run As -> Run on Server опция.

Я изучал другие сгенерированные Maven проекты Eclipse, которые работают (но не настроены с желаемой комбинацией JAR) в том смысле, что они могут быть запущены на сервере. Например, этот работает, но у него нет нужных мне JAR-файлов:

mvn архетип: генерировать -DarchetypeArtifactId = maven-archetype-webapp \ -DgroupId = имя-пакета -DartifactId = имя-проекта

Нужно ли создавать собственный artifactId архетипа в имитации ...- DarchetypeArtifactId = maven-archetype-webapp ... Я вижу в приведенной выше команде и, если да, то как?

Или это просто функция файловой системы, созданной этим архетипом? Я вижу, что проект, который я создал (webapp1) ...

webapp1
|-- src
|   `-- main
|       |-- java
|       |-- resources
|       `-- webapp
|           `-- WEB-INF
`-- target
    `-- classes`

... имеет содержимое, отличное от содержимого, сгенерированного с помощью maven-archetype-webapp , но я не знаю, как заставить mvn eclipse: clean eclipse: eclipse создать (или это то, что говорит Eclipse, что это веб-приложение, и оно должно быть настроено для запуска от имени -> Запуск на сервере).

simpleWeb
|-- src
|   `-- main
|       |-- java
|       |   `-- com
|       |       `-- mytutorial
|       |-- resources
|       |   `-- com
|       |       `-- mytutorial
|       `-- webapp
|           |-- META-INF
|           |-- pages
|           `-- WEB-INF
`-- target
    |-- classes
    |   `-- com
    |       `-- mytutorial
    |-- maven-archiver
    |-- META-INF
    |   `-- maven
    |       `-- com.mytutorial
    |           `-- simpleWeb
    |-- pages
    |-- simpleWeb
    |   |-- META-INF
    |   |-- pages
    |   `-- WEB-INF
    |       |-- classes
    |       |   `-- com
    |       |       `-- mytutorial
    |       `-- lib
    |-- surefire
    |-- test-classes
    `-- WEB-INF
        |-- classes
        |   `-- com
        |       `-- mytutorial
        `-- lib

Обильное спасибо всем, кто может направить меня на путь просветления.

Russ

P.S. Вот мой 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>com.etretatlogiciels.webapp1</groupId>
  <artifactId>webapp1</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>webapp1 Maven Webapp</name>
  <url>http://maven.apache.org</url>

  <properties>
    <commons-beanutils-version>    1.8.3        </commons-beanutils-version>
    <commons-codec-version>        1.4          </commons-codec-version>
    <commons-collections-version>  3.2.1        </commons-collections-version>
    <commons-digester-version>     2.1          </commons-digester-version>
    <commons-discovery-version>    0.4          </commons-discovery-version>
    <commons-logging-version>      1.1.1        </commons-logging-version>
    <jsf-facelets-version>         1.1.15       </jsf-facelets-version>
    <myfaces-version>              2.0.4        </myfaces-version>
    <richfaces-version>            3.3.3.Final  </richfaces-version>
  </properties>

  <pluginRepositories>
    <pluginRepository>
      <id>jboss-public-repository-group</id>
      <name>JBoss Public Maven Repository Group</name>
      <url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
      <layout>default</layout>
      <releases>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
      </releases>
      <snapshots>
        <enabled>true</enabled>
        <updatePolicy>never</updatePolicy>
      </snapshots>
    </pluginRepository>
  </pluginRepositories>

  <dependencies>
    <!-- Apache Commons -->
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>${commons-beanutils-version}</version>
    </dependency>
    <dependency>
      <groupId>commons-codec</groupId>
      <artifactId>commons-codec</artifactId>
      <version>${commons-codec-version}</version>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <version>${commons-collections-version}</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>commons-digester</groupId>
      <artifactId>commons-digester</artifactId>
      <version>${commons-digester-version}</version>
    </dependency>
    <dependency>
      <groupId>commons-discovery</groupId>
      <artifactId>commons-discovery</artifactId>
      <version>${commons-discovery-version}</version>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>${commons-logging-version}</version>
    </dependency>

    <!-- Facelets -->
    <dependency>
      <groupId>com.sun.facelets</groupId>
      <artifactId>jsf-facelets</artifactId>
      <version>${jsf-facelets-version}</version>
    </dependency>

    <!-- MyFaces -->
    <dependency>
      <groupId>org.apache.myfaces.core</groupId>
      <artifactId>myfaces-api</artifactId>
      <version>${myfaces-version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.myfaces.core</groupId>
      <artifactId>myfaces-impl</artifactId>
      <version>${myfaces-version}</version>
    </dependency>

    <!-- RichFaces -->
    <dependency>
      <groupId>org.richfaces.framework</groupId>
      <artifactId>richfaces-api-jsf2</artifactId>
      <version>${richfaces-version}</version>
    </dependency>
    <dependency>
      <groupId>org.richfaces.framework</groupId>
      <artifactId>richfaces-impl-jsf2</artifactId>
      <version>${richfaces-version}</version>
    </dependency>
    <dependency>
      <groupId>org.richfaces.framework</groupId>
      <artifactId>richfaces-ui-jsf2</artifactId>
      <version>${richfaces-version}</version>
    </dependency>

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

  <build>
    <finalName>webapp1</finalName>
    <resources>
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.java</include>
        </includes>
      </resource>
      <resource>
        <directory>src/main/resources</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.0</version>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.0.2</version>
        <configuration>
        <source>1.5</source>
        <target>1.5</target>
      </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>richfaces</id>
        <activation>
        <activeByDefault>true</activeByDefault>
        </activation>
        <repositories>
          <repository>
            <id>maven2.repository</id>
            <name>Repository for Maven by Maven</name>
            <url>http://repo2.maven.org/maven2</url>
            <layout>default</layout>
            <releases>
              <enabled>true</enabled>
              <updatePolicy>always</updatePolicy>
            </releases>
          </repository>
          <repository>
            <id>maven2-repository.dev.java.net</id>
            <name>Java.net Repository for Maven</name>
            <url>http://download.java.net/maven/1</url>
            <layout>legacy</layout>
            <releases>
              <enabled>true</enabled>
              <updatePolicy>always</updatePolicy>
            </releases>
          </repository>
          <repository>
            <id>JBoss Repository Old</id>
            <name>Repository for Maven by JBoss</name>
            <url>http://repository.jboss.org/maven2</url>
            <layout>default</layout>
            <releases>
              <enabled>true</enabled>
              <updatePolicy>always</updatePolicy>
            </releases>
          </repository>
          <repository>
            <id>JBoss Repository Nexus</id>
            <name>Repository for Maven by JBoss</name>
            <url>http://repository.jboss.org/nexus/content/groups/public-jboss</url>
            <layout>default</layout>
            <releases>
              <enabled>true</enabled>
              <updatePolicy>always</updatePolicy>
          </releases>
        </repository>
      </repositories>
    </profile>
  </profiles>

</project>

Ответы [ 3 ]

7 голосов
/ 29 ноября 2011

У меня была точно такая же проблема.Ни один из существующих архетипов не соответствовал моим потребностям.Если бы я создал (из затмения) проект из пользовательского архетипа, он не стал бы динамическим веб-проектом.Если вы запустите mvn -Dwtpversion = 2.0 eclipse: eclipse снова добавляет все виды вещей, которые вам не нужны.Так что после расследования я в итоге выяснил, что определяет «динамический веб-проект».Это набор каталогов и файлов из каталога .settings и записей в .project.

Итак, вам нужно сделать следующее:
1.) создать пустой (не maven) динамический веб-проект из затмения.
2.) Без добавления каких-либо файлов или любых другихизменения, проверьте в файловой системе следующие файлы, созданные eclipse (относительно каталога проекта):
.project
.settings / org.eclipse.jdt.core.prefs
.settings / org.eclipse.wst.common.project.facet.core.prefs.xml
.settings / org.eclipse.wst.jsdt.ui.superType.name
.settings / org.eclipse.jst.jsp.core.prefs
.settings / org.eclipse.wst.common.project.facet.core.xml
.settings / org.eclipse.wst.common.component
.settings / org.eclipse.wst.jsdt.ui.superType.container

3.) Скопируйте эти файлы в каталог archetype-resources для своего пользовательского времени архе
4.) Отредактируйте и обобщите скопированные файлы (заменив фактические имена проектов на $ {artifactId} и т.д ...
5.) В вашем файле archetype-metadata.xml добавьте:

<fileSet encoding="UTF-8" filtered="true">
  <directory></directory>
<includes>
  <include>.project</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true">
  <directory>.settings</directory>
</fileSet>

Без этого maven будетне загружать файлы, начинающиеся с ". *"

6.) Вуаля !.Установите и разверните свой архетип и попробуйте снова.У меня это сработало.

7 голосов
/ 29 марта 2012

как насчет простой настройки maven-eclipse-plugin в вашем файле archetype-resources / pom.xml?

<build>
    <finalName>archetype-javaee5-webapp</finalName>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <version>2.9</version>
                <configuration>
                    <wtpversion>2.0</wtpversion>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>    

. Это создаст веб-проект в eclipse

2 голосов
/ 04 ноября 2011

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

1) создать проект, используя что-то вроде:

mvn архетип: генерировать> необязательные аргументы, например -Dfilter = webapp-j2ee <</p>

Это поможет вам в создании проекта maven в интерактивном режиме, и вам не придется вводить опции для artifactId, groupId и т. Д.

Примечание. Возможно, это не динамический веб-проект, в моем случае это не так ... (Я полагаю, что в основном это зависит от используемого вами archetype-artifactId, и я не нашел тот, который будет сам генерировать модуль Dynamic Web для базового приложения j2ee, которое будет использовать только jsp, servlet и ничего более)

2) Теперь, чтобы сгенерировать файл проекта для Eclipse, используйте эту команду:

mvn -Dwtpversion = 2.0 затмение: затмение

Это создаст файл проекта, в котором будет установлен требуемый фасет проекта. Поэтому, когда вы импортируете его в Eclipse IDE, это будет «Динамический веб-модуль».

Примечание. Теперь, если вы ищете конкретную версию «Динамического веб-модуля», вам необходимо настроить POM. Версия зависит от следующего тега в вашем теге сборки:

<code>
<build>
......
  <plugins>
  ........
    <plugin>
      <groupId>         org.apache.maven.plugins  </groupId>
      <artifactId>      maven-compiler-plugin     </artifactId>
      <version>         2.3.2                     </version>
      <configuration>
                   <source>   1.6     </source>
                   <target>   1.6     </target>
      </configuration>
    </plugin>
  .........
  </plugins>
.......
</build>
</code>

Теперь, если источник и цель установлены на 1.6 (как в этом случае), тогда будет выбран Dynamic Web Module 2.5. В противном случае это будет 2,4 для компилятора-плагина 1.4 и т. Д.

...