2011-03-23 38 views
6

Tengo un POM en funcionamiento o en su mayoría que funciona, que recupera todos y exactamente los JAR que me interesan para escribir una aplicación de Facelets. Estoy usando m2eclipse. Cuando importo la nueva aplicación creada por Maven, viene de forma limpia y más o menos como se esperaba, sin embargo, no es como un Proyecto web dinámico porque cuando intento ejecutarlo, no ofrece Ejecutar como -> Ejecutar en el servidor opción.Cómo crear una aplicación web Arquetipo Maven para Eclipse?

He estudiado otros proyectos de Eclipse generados por Maven que funcionan (pero no vienen configurados con la combinación de JAR que quiero) en el sentido de que se pueden ejecutar en el servidor. Por ejemplo, éste funciona, pero no tiene los archivos JAR que quiero:

mvn arquetipo: generar -DarchetypeArtifactId = maven-arquetipo-webapp \ -DgroupId = nombre-paquete -DartifactId = nombre-proyecto

¿Es necesario crear un arquetipo artifactId costumbre en la imitación de la ...- DarchetypeArtifactId = maven-arquetipo-webapp ... que veo en en el comando anterior y, si es así, ¿cómo?

¿O es simplemente una función del sistema de archivos configurado por ese arquetipo? Veo que el proyecto he generado (webapp1) ...

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

... tiene un contenido diferente de un experto generada usando -arquetipo-webapp, pero no sé cómo forzar mvn eclipse: clean eclipse: eclipse para generar eso (o si eso es lo que está diciendo a Eclipse, esta es una aplicación web y debería configurarse para Ejecutar como -> Ejecutar en el servidor).

 
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 

Profundo gracias a cualquiera que pueda lanzarme en el camino de la iluminación.

Russ

P.S. Aquí está mi 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> 
+0

¿Cuál es tu objetivo? Su descripción del problema es demasiado compleja. Si desea ejecutar war en apache tomcat, puede agregar el servidor apache tomcat en eclipse: window-> show view-> others-> server-> servers. Luego, vincule su proyecto a tomcat (utilicé la sincronización de archivos, pero mi camino no es el más fácil). –

+0

Gracias.Supongo que no sé exactamente lo que quiero porque no conozco el espacio entre Maven y Eclipse. Mi objetivo es unir ese espacio con la comprensión, luego escribir sobre él para otros (además de crear una aplicación web). Ya tengo un servidor Tomcat en mi área de trabajo, pero hay que hacer un cableado Eclipse, que normalmente se maneja mediante la creación de un proyecto web dinámico. Como estoy dejando que Maven cree el proyecto, nada de eso se está haciendo. He comparado mi POM con otros POM para los cuales el cableado parece funcionar y no puedo revelar la diferencia. –

Respuesta

7

He tenido exactamente el mismo problema. Ninguno de los arquetipos existentes coincidía con mis necesidades. Si creara (a partir de eclipse) un proyecto de arquetipo personalizado, no se convertiría en un proyecto web dinámico. Si ejecuta mvn -Dwtpversion = 2.0 eclipse: eclipse nuevamente agrega todo tipo de cosas que no necesita. Así que después de investigar finalmente descubrí lo que defiende el "proyecto web dinámico". Es un grupo de directorios y archivos de directorio .settings y entradas en .project.

Lo que necesita hacer es lo siguiente:
1.) crear un proyecto web dinámico vacío (no maven) desde dentro de eclipse.
2.) sin añadir archivos o cualquier otro cambio, inspeccione el sistema de archivos de los siguientes archivos creados por el eclipse (en relación con el directorio del proyecto):
.project
.settings/org.eclipse.jdt.core. Preferencias
.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.) copiar estos archivos en el directorio de recursos arquetipo para su archetime encargo
4.) Editar y generalizar los archivos copiados (reemplazando nombres reales del proyecto con $ {} artifactId etc ...
5.) en el archivo arquetipo-metadata.xml añaden:

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

sin este experto no subir archivos a partir de

"*".

6.) Voila !. Instala y despliega tu arquetipo y vuelve a intentarlo. Funcionó para mí

+0

¡Súper! Muchas gracias, mi amigo! –

1

Para crear un proyecto Web dinámico para Eclipse, que tiene que hacer esto:

1) Generar un proyecto usando algo como:

mvn arquetipo: generar> argumentos opcionales como -Dfilter = webapp-j2ee <

Esto ayudará usted en la generación de un proyecto maven en modo interactivo y no tendrá que escribir opciones para artifactId, groupId, etc.

Nota: Puede que aún no sea un proyecto web dinámico, en mi caso, nunca lo es .. . (supongo que básicamente depende del arquetipo-artifactId que haya usado y no he encontrado el que generará un módulo Dynamic Web por sí solo para una aplicación j2ee básica que usará solo jsp, servlet y nada más)

2) Ahora, para generar el archivo de proyecto para Eclipse, utilice este comando:

mvn -Dwtpversion = 2.0 eclipse: eclipse

Esto generará un archivo de proyecto que tendrá el conjunto de facetas del proyecto requerido. Entonces cuando lo importe en su Eclipse IDE, será un "Módulo web dinámico".

Nota: Ahora, si está buscando una versión particular del "Módulo web dinámico", entonces necesita configurar su POM. La versión depende de la siguiente etiqueta dentro de su etiqueta de construcción:

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

Ahora, si el origen y el destino se establecen a 1,6 (como en este caso), entonces el módulo Web dinámica 2.5 obtendrá seleccionado. De lo contrario, será 2.4 para el compilador-complemento 1.4 y así sucesivamente.

7

¿Qué tal si configuramos maven-eclipse-plugin en 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>  

esto creará un proyecto web capaz de Eclipse

+1

Gracias por esta respuesta. Finalmente, abandoné Maven por Ivy + hormiga. Sé que es un anatema admitir esto en un mundo totalmente Maven, pero espero que la policía del pensamiento nunca me encuentre ;-) Si alguna vez tengo la oportunidad de volver sobre mi decisión, voy a probar esta solución. –

+0

Esta es la solución que uso para que mis aplicaciones web sean reconocidas como tales en Eclipse. Funciona como se esperaba –

+0

Asegúrese de instalar Maven Integration para Eclipse WTP (m2e-wtp) http://marketplace.eclipse.org/node/441371#.URhKr1qje1k – Ring

Cuestiones relacionadas