Как создать архетип веб-приложения Maven для Eclipse?

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

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

mvn архетип: generate-DarchetypeArtifactId=maven-архетип-webapp - DgroupId=пакет-имя-DartifactId=проект-Имя

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

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

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

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

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

Русс

P. S. Вот мой пом.в 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 ответов


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

Так что тебе нужно? сделайте следующее:
1.) создайте пустой (не maven) динамический веб-проект из eclipse.
2.) Без добавления каких-либо файлов или каких-либо других изменений проверьте в файловой системе следующие файлы, созданные eclipse (относительно проекта directory):
.проект
.настройки/орг.затмение.JDT, предназначенным.ядро.преф
.настройки/орг.затмение.wst.общий.проект.грань.ядро.префы.в XML
- ... настройки / org.затмение.wst.jsdt.ui.супертип.имя
.настройки/орг.затмение.jst.JSP-страница.ядро.преф
.настройки/орг.затмение.wst.общий.проект.грань.ядро.в XML
.настройки/орг.затмение.wst.общий.компонент
.настройки/орг.затмение.wst.jsdt.пользовательский интерфейс.супертип.контейнер

3.) Скопируйте эти файлы в archetype - каталог ресурсов для пользовательского archetime
4.) Редактировать и обобщать скопированные файлы (заменяя фактические имена проектов на ${artifactId} и т. д...
5.) В вашем архетипе-метаданные.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. Вуаля!. Установите и разверните свой архетип и повторите попытку. У меня получилось.


Как насчет настройки 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


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

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

mvn archetype: generate >необязательные аргументы, такие как-Dfilter=webapp-j2ee

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

Примечание: это все еще может быть не динамический веб-проект, в моем случае это никогда не так... (Я думаю, в основном это зависит от архетипа-artifactId, который вы использовали, и я не нашел тот, который будет генерировать динамический веб-модуль сам по себе для базового приложения j2ee, которое будет использовать только JSP, сервлета и ничего больше)

2) Теперь, чтобы создать файл проекта для eclipse, используйте следующую команду:

mvn-Dwtpversion=2.0 eclipse: eclipse

это создаст файл проекта, который будет иметь необходимый набор фасетов проекта. Так когда? вы импортируете его в свою 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 (как в этом случае), то будет выбран динамический веб-модуль 2.5. В противном случае, это будет 2.4 для компилятора-плагин 1.4 и так далее.