Apache Maven officially provides a few templates to create general purpose Java EE projects, in the Maven world, they are named archetype. There are several archetypes under group org.codehaus.mojo.archetypes can be used to create EAR, appclient, or simple web applications.
The following is an example of creating a Java EE 7 web applicaiton.
mvn archetype:generate
-DarchetypeGroupId=org.codehaus.mojo.archetypes
-DarchetypeArtifactId=webapp-javaee7
-DarchetypeVersion=1.0
-DgroupId=com.hantsylab.sample.ee7api
-DartifactId=ee7-api
-Dversion=0.1-SNAPSHOT
-Dpackage=com.hantsylab.sample.ee7api
Read this article from DZone for more details.
NetBeans IDE provides built-in support for these archetypes when create a Maven based Java EE project from New Project wizard.
Wildfly also provide a few archetype which are ready for Java EE 7 and Wildfly application server.
Most of time, I used Wildfly as target application server in projects. In the following sample I will use the archetype wildfly-javaee7-webapp-blank-archetype under group id org.wildfly.archetype to create the project skeleton.
Open your terminal, use command mvn archetype:generate
to generate the project skeleton.
mvn archetype:generate
-Darchetype.interactive=false
-DarchetypeGroupId=org.wildfly.archetype
-DarchetypeArtifactId=wildfly-javaee7-webapp-blank-archetype
-DarchetypeVersion=8.2.0.Final
-DgroupId=com.hantsylab.example.ee7
-DartifactId=blog-api
-Dversion=0.1-SNAPSHOT
-Dpackage=com.hantsylab.example.ee7
Before you run the command, you can browse org.wildfly.archtype in mvnrepository.org.
Luckily, almost all of the popular IDEs, such as Intellij IDEA, NetBeans, JBoss Developer Studio have provided friendly wizards to create project from Maven archetypes step by step.
Import the project you have just created into JBoss Developer Studio.
Open Package view, you will see the following project structure.
Beside the pom.xml file, it just includes some specific files for different Java EE specification.
Open the pom.xml file.
Unlike the former posts which used JBoss Enterprise repository by default, in this project, we generated the project skeleton from a wildfly specific maven archetype, all dependencies are Wildfly specific.
wildfly-maven-plugin allows you deploy and undeploy via maven command line.
<plugin>
<groupId>org.wildfly.plugins</groupId>
<artifactId>wildfly-maven-plugin</artifactId>
<version>${version.wildfly.maven.plugin}</version>
</plugin>
There are several maven profiles defined. arq-wildfly-remote and arq-wildfly-managed are ready for JBoss Arquillian test. openshift for OpenShift Cloud deployment.
<profiles>
<profile>
<id>arq-wildfly-managed</id>
...
</profile>
<profile>
<id>arq-wildfly-remote</id>
...
</profile>
<profile>
<id>openshift</id>
...
</profile>
</profiles>
The difference between arq-wildfly-remote and arq-wildfly-managed is the former requires a running Wildfly server before run the test codes, and the later Arquillian will manage the Wildfly itself.
We will use the latest Wildfly, aka 10.0.0.Final. We have to the dependencies to Wildfly 10.0.0.Final.
Some changes you have to be careful about.
The Wildfly Arquillian dependency groupId was changed to org.wildfly.arquillian
.
Add the latest Arquillian BOM in the dependencyManagement fragment, and change the arq-wildfly-managed profile to the following.
<profile>
<!-- An optional Arquillian testing profile that executes tests in your
WildFly instance -->
<!-- This profile will start a new WildFly instance, and execute the test,
shutting it down when done -->
<!-- Run with: mvn clean test -Parq-wildfly-managed -->
<id>arq-wildfly-managed</id>
<properties>
<serverProfile>standalone-full.xml</serverProfile>
<serverRoot>${project.build.directory}/wildfly-${version.wildfly}</serverRoot>
</properties>
<dependencies>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-managed</artifactId>
<version>${version.org.wildfly.arquillian}</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<configuration>
<skip>${maven.test.skip}</skip>
</configuration>
<executions>
<execution>
<id>unpack</id>
<phase>process-test-classes</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-dist</artifactId>
<version>${version.wildfly}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<environmentVariables>
<JBOSS_HOME>${project.build.directory}/wildfly-${version.wildfly}</JBOSS_HOME>
</environmentVariables>
</configuration>
</plugin>
</plugins>
</build>
</profile>
It will download Wildfly 10 and start it before run a test, and stop it after the test running is complete. No need an external Wilfly server.
The wildfly maven plugin is available in pom.xml, you can use it to deploy, undeploy this project into our Wildfly application server.
mvn wildfly:deploy -DskipTests
to deploy the project into Wildfly application server.mvn wildfly:undeploy
to undeploy it.In the next steps, I will try to create the similar APIs in angularjs-springmvc-sample-boot, but use Java EE 7/Wildfly/JAXRS to implement it. As the angularjs-springmvc-sample-boot, the test codes will be available. We will use Wildfly as default server, and use JBoss Arquillian to test the Java EE components in Wildfly container.