I have a working or mostly working POM that fetches all and exactly just the JARs that interest me for writing a Facelets application. I'm using m2eclipse. When I import the newly Maven-created application, it comes in cleanly and more or less as expected, however, it is not like a Dynamic Web Project in that when I try to run it, it offers no Run As -> Run on Server option.
I have studied other Maven-generated Eclipse projects that do work (but don't come set up with the JAR combination I want) in the sense that they can be run on Server. For example, this one works, but it's not got the JARs I want:
mvn archetype:generate -DarchetypeArtifactId=maven-archetype-webapp \ -DgroupId=package-name -DartifactId=project-name
Do I need to create a custom archetype artifactId in imitation of the ...-DarchetypeArtifactId=maven-archetype-webapp... I see in in the command above and, if so, how?
Or is it merely a function of the filesystem set up by that archetype? I see that the project I've generated (webapp1)...
webapp1 |-- src | `-- main | |-- java | |-- resources | `-- webapp | `-- WEB-INF `-- target `-- classes`
... has different content than one generated using maven-archetype-webapp, but I don't know how to force mvn eclipse:clean eclipse:eclipse to generate that (or whether that's what's telling Eclipse this is a web application and it should set up for Run As -> Run on 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
Profuse thanks to anyone who can launch me on the path of enlightenment.
Russ
P.S. Here's my 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>
Create Web Application To create a simple java web application, we will use maven-archetype-webapp plugin. So, let's open the command console, go to the C:\MVN directory and execute the following mvn command. Sr.No. contains src folder and pom.
The Lagom Maven archetype allows you to quickly create a project for development.
Building and Running the Maven Project in Eclipse To run the maven project, select it and go to “Run As > Java Application”. In the next window, select the main class to execute. In this case, select the App class and click on the Ok button. You will see the “Hello World” output in the Console window.
I've had exactly the same problem. None of existing archetypes matched my needs. If I created (from eclipse) a project from custom archetype it wouldn't become dynamic web project.
If you run mvn -Dwtpversion=2.0 eclipse:eclipse it again adds all sorts of things you don't need.
So after investigating I eventually found out what defeines "dynamic web project". It's a bunch of directories and files of in .settings directory and entries in .project.
So what you need to do is the following:
1.) create an empty (non-maven) dynamic web project from within eclipse.
2.) Without adding any files or any other changes, inspect on the file system the following files created by eclipse (relative to the project directory):
.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.) Copy these files to your archetype-resources directory for your custom archetime
4.) Edit and generalise the copied files (replacing actual project names with ${artifactId} etc...
5.) In your archetype-metadata.xml file add:
<fileSet encoding="UTF-8" filtered="true">
<directory></directory>
<includes>
<include>.project</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8" filtered="true">
<directory>.settings</directory>
</fileSet>
Without this maven will not upload files starting with ".*"
6.) Voila!. Install and deploy your archetype and try again. It worked for me.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With