Wednesday, February 25, 2009

Maven practice

- Unzip the maven installable and show the settings.xml. Set the repository folder to the repo in the maven training area. Also uncomment the proxy and change settings.

- Then run the create archetype command.
mvn archetype:create -DartifactId=test -DgroupId=sample.oracle.toplink

- Display the folder that is generated. Run the "mvn install" command to display how build, packaging and installing is done.

- Copy the resulting pom to SampleApp folder and make changes to artifactId, packaging(to pom), add modules like this:
<modules>
<module>Model</module>
<module>ViewController</module>
</modules>

- Copy pom to Model and ViewController and do similar things. Apply the parent tag these pom files:
<parent>
<groupId>sample.oracle.toplink</groupId>
<artifactId>TestApp</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>..</relativePath>
</parent>
Change the artifact id, name, packaging and remove the dependencies for now.
- In pom.xml of Model & ViewController put in the build tag with the proper source directory because the project is a jdev project.
<build>
<sourceDirectory>src</sourceDirectory>
</build>
- Now compile with the command "mvn compile" and you should get compile errors. Firstly, because the wrong jdk is being used. Correct it by putting the following in both pom files:
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
- Now, to the pom.xml of Model & ViewController add resource folder and inclusion details in the build tag to the pom file which may look like this:
<resources>
<resource>
<directory>src</directory>
<includes>
<include>**/*.gif</include>
<include>**/*.jpg</include>
<include>**/*.jpeg</include>
<include>**/*.png</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*-apf.xml</include>
<include>**/*.ejx</include>
<include>**/*.xcfg</include>
<include>**/*.cpx</include>
<include>**/*.dcx</include>
<include>**/*.wsdl</include>
<include>**/*.ini</include>
<include>**/*.tld</include>
<include>**/*.tag</include>
<include>**/*.jpx</include>
<include>**/*.properties</include>
</includes>
</resource>
</resources>

- Now to install dependent jars of oracle into the local repo.
<use utility>
- Add dependencies to the pom file.
- Do the same to the web project. But it requires different treatment. Firstly, add the Model project as a dependency to this project. That is add a dependency like this:
<dependency>
<groupId>sample.oracle.toplink</groupId>
<artifactId>Model</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
Then add the following plugin so that the packaging that takes place is of war type:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<webappDirectory>public_html</webappDirectory>
<archive>
<manifest>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
- Now to create an ear file one must create a new folder called ear in the parent folder that contains the Model and ViewController project. This will be like a new maven project but only dealing with creation of the ear file. Copy the pom file created in the first stages to this folder and do the following changes:
- Add the parent tag like before. Make changes to the artifactId, name and packaging(it must be ear now).
- Add the war project as a dependency. It should look like this:
<dependencies>
<dependency>
<groupId>sample.oracle.toplink</groupId>
<artifactId>UI</artifactId>
<version>10.1.3.3</version>
<type>war</type>
</dependency>
<dependency>
<groupId>sample.oracle.toplink</groupId>
<artifactId>Model</artifactId>
<version>10.1.3.3</version>
<type>ejb</type>
</dependency>
</dependencies>
- Add a build tag like this to be able to build an ear file:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
<displayName>TestApp</displayName>
<description>Test Application</description>
<modules>
<ejbModule>
<groupId>sample.oracle.toplink</groupId>
<artifactId>Model</artifactId>
</ejbModule>
<webModule>
<groupId>sample.oracle.toplink</groupId>
<artifactId>UI</artifactId>
<contextRoot>/test</contextRoot>
</webModule>
</modules>
<earSourceExcludes>*.jar</earSourceExcludes>
</configuration>
</plugin>
</plugins>
</build>
- This should create an ear file. But when you try to deploy the ear file in the oc4j server, you will start getting errors about a few classes not found. These were the jars that got left out during installation of jars in the local repo because the xml file didn't have mappings for a few libraries. I still haven't been able to find the file that contains all mappings for libraries. These jars you will have to manually install and put in pom as dependencies. For now, the libs that are'nt available are open source ones. These are the easiest to use. You just define them as dependency, they will be automatically installed in the local repo.
- Make the folders src/main/resources/META-INF and put the orion-application.xml file into it, which you get from building an ear file from the jdeveloper. (It is always advisable to make a war deployment profile in jdeveloper, before going ahead with this exercise. Also, try deploying it on a standalone OC4J instance and see it running.) You will also need to add this to the pom.xml so that this file is dropped in the right place before packaging(note the resources tag only).
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<targetPath>../${project.artifactId}-${project.version}</targetPath>
</resource>
</resources>
<plugins>

No comments: