2011-03-23 27 views
6

Ho un POM funzionante o in gran parte funzionante che recupera tutti e esattamente solo i JAR che mi interessano per scrivere un'applicazione Facelets. Sto usando m2eclipse. Quando importare la nuova applicazione creata da Maven, viene visualizzata in modo pulito e più o meno come previsto, tuttavia, non è come un progetto Web dinamico in quanto quando provo a eseguirlo, non offre Esegui come -> Esegui sul server opzione.Come creare l'archetipo Maven dell'applicazione Web per Eclipse?

Ho studiato altri progetti Eclipse generati da Maven che funzionano (ma non vengono configurati con la combinazione JAR che desidero) nel senso che possono essere eseguiti su Server. Ad esempio, questo funziona, ma non ha i JAR che voglio:

mvn archetipo: generare -DarchetypeArtifactId = Maven-archetipo-webapp \ -DgroupId = nome-pacchetto -DartifactId = nome-progetto

ho bisogno di creare un artifactId archetipo personalizzato a imitazione del ...- DarchetypeArtifactId = Maven-archetipo-webapp ... vedo in nel comando di cui sopra e, se sì, come?

O è semplicemente una funzione del filesystem impostato da tale archetipo? Vedo che il progetto che ho generato (WebApp1) ...

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

... ha un contenuto diverso rispetto a quello generato usando Maven-archetipo-webapp, ma non so come forzare mvn eclipse: clean eclipse: eclipse per generare quello (o se questo è ciò che sta dicendo Eclipse questa è un'applicazione web e dovrebbe essere impostata per Esegui come -> Esegui sul server).

 
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 

Profuso grazie a chiunque possa lanciarmi sulla via dell'illuminazione.

Russ

P.S. Ecco la mia 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

ciò che è si mira? La tua descrizione del problema è troppo complessa. Se vuoi lanciare war in apache tomcat puoi aggiungere il server apache tomcat in eclissi: window-> show view-> others-> server-> servers. Quindi collega il tuo progetto a tomcat (ho usato la sincronizzazione dei file - ma la mia strada non è la più semplice). –

+0

Grazie.Suppongo di non sapere esattamente cosa voglio in quanto non conosco lo spazio tra Maven ed Eclipse. Il mio obiettivo è quello di colmare tale spazio con la comprensione, quindi scrivere su di esso per gli altri (in realtà anche per la creazione di un'applicazione web). Ho già un server Tomcat nel mio spazio di lavoro, ma c'è il cablaggio Eclipse, normalmente gestito creando un progetto Web dinamico, che deve essere fatto. Mentre sto lasciando che Maven crei il progetto, nessuno di questi collegamenti viene fatto. Ho confrontato il mio POM con altre POM per le quali il cablaggio sembra funzionare e non può rivelare la differenza. –

risposta

7

Ho avuto esattamente lo stesso problema. Nessuno degli archetipi esistenti corrispondeva alle mie esigenze. Se avessi creato (da eclissi) un progetto da un archetipo personalizzato, non sarebbe diventato un progetto web dinamico. Se si esegue mvn -Dwtpversion = 2.0 eclipse: eclipse di nuovo aggiunge tutti i tipi di cose che non sono necessari. Quindi, dopo aver indagato, alla fine ho scoperto cosa significa "progetto web dinamico". È un mucchio di directory e file nella directory .settings e le voci in .project.

Quindi, ciò che è necessario fare è:
1.) creare un progetto Web dinamico (non modificato) all'interno di eclissi.
2.) senza l'aggiunta di file o altre modifiche, ispezionare nel file system i seguenti file creati da Eclipse (relativa alla directory di progetto):
.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.) Copiare questi file nella directory archetipo-risorse per la vostra archetime personalizzato
4.) Modifica e generalizzare i file copiati (sostituendo nomi reali di progetto con $ {} artifactId etc ...
5.) nel file archetipo-metadata.xml aggiungono:

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

senza questo esperto di non caricare i file che iniziano con

"*."

6.) Voila !. Installa e distribuisci il tuo archetipo e riprova. Ha funzionato per me.

+0

Super! Grazie mille, amico mio! –

1

Per creare un progetto Web dinamico per Eclipse, è necessario fare questo:

1) generare un progetto che utilizza qualcosa come:

mvn archetype: generate> argomenti opzionali come -Dfilter = webapp-j2ee <

Questo aiuterà tu nel generare un progetto esperto in modalità interattiva e non dovrai digitare le opzioni per artefatto, gruppoId ecc.

Nota: Potrebbe non essere un progetto Web dinamico, nel mio caso, non lo è mai .. (suppongo che fondamentalmente dipenda dall'archetipo-artefatto che hai usato e non ho trovato quello che genererà un modulo Web dinamico da solo per un'applicazione j2ee di base che utilizzerà solo jsp, servlet e niente più)

2) Ora per generare il file di progetto per Eclipse, utilizzare questo comando:

mvn -Dwtpversion = 2.0 eclipse: eclipse

Questo genererà un file di progetto che avrà il set di sfaccettature del progetto richiesto. Quindi quando lo importi nel tuo IDE Eclipse, sarà un "Modulo Web dinamico".

Nota: ora se si sta cercando una versione particolare del "Modulo Web dinamico", è necessario configurare il POM. La versione dipende dalla seguente tag all'interno del tuo tag di generazione:

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

Ora, se la sorgente e la destinazione sono impostati su 1.6 (come in questo caso), allora il modulo Web dinamico 2.5 sarà selezionato. Altrimenti, sarà 2.4 per il compilatore-plugin 1.4 e così via.

7

che ne dici di configurare semplicemente maven-eclipse-plugin nel tuo 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>  

questo creerà un progetto web-in grado in Eclipse

+1

Ti ringrazio per questa risposta. Alla fine ho abbandonato Maven per Ivy + ant. So che è anatema ammetterlo in un mondo totalmente Maven, ma spero che la polizia del pensiero non mi troverà mai ;-) Se mai avrò occasione di tornare sulla mia decisione, proverò a provare questa soluzione. –

+0

Questa è la soluzione che uso per avere le mie app Web riconosciute come tali in Eclipse. Funziona come previsto. –

+0

Assicurarsi di installare Maven Integration per Eclipse WTP (m2e-wtp) http://marketplace.eclipse.org/node/441371#.URhKr1qje1k – Ring

Problemi correlati