I sorta use Maven to build Tomcat. I basically use Maven to call ant and the build proceeds as normal using the build.xml file. The advantage, though, is that all my jar depencencies are centralized: they are all listed in my project.xml, and they are all downloaded to a common directory.
I tried to fully convert to a maven build, but found that the tomcat build is fairly intricate. I eventually gave up...I may try to translate the ant projects to maven goals later, but I don't have the time right now. Let me know if you can do it successfully.
I think it's important to realize that you can use any ant tasks in a maven.xml file. That should make the transition easier. I didn't realize this at first. The maven docs need some tuning.
My build setup is follows: pkgs/all-tomcat/src/repository/<group>/jars/<jar>-<version>.jar pkgs/apache-ant/src/<untarred ant binary distribution> pkgs/jakarta-tomcat/src/<untarred tomcat source + maven files> pkgs/jakarta-tomcat-connectors/src/<untarred tomcat connectors source +> pkgs/maven/src/<untarred maven binary distribution>
-Ted
Some useful docs/files are below. I'm sure other ppl may find this useful. I can zip these up and send them to you personally if you'd like. I make no promise that this will work for you, but it probably will.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B U I L D I N G T O M C A T C O N N E C T O R S - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Prerequisites: (none)
(1) Download Tomcat Connectors tarball
* Download jakarta-tomcat-connectors-4.1.27-src.tar.gz from:
http://mirrors.ccs.neu.edu/Apache/dist/jakarta/tomcat-4/source/to:
pkgs/jakarta-tomcat-connectors
(2) Untar the Tomcat Connectors source tarball:
pkgs/jakarta-tomcat-connectors> tar zxf jakarta-tomcat-connectors-4.1.27-src.tar.gz
pkgs/jakarta-tomcat-connectors> mv jakarta-tomcat-connectors-4.1.27-src src
(3) Setup ant build files
* Create the jk/build.properties file:
pkgs/jakarta-tomcat/src> cd jk pkgs/jakarta-tomcat/src/jk> cp build.properties.sample build.properties
* Update the properties below in build.properties: (our tomcat does not rely on apache)
#tomcat5.home= ../../../jakarta-tomcat-5/build
#tomcat40.home=../../../jakarta-tomcat-4.0/build
tomcat41.home=../../../jakarta-tomcat/src/build
#tomcat33.home= ../../jakarta-tomcat/build/tomcat
#apache2.home=/opt/apache2
#apache13.home=/opt/apache13
#iplanet.home=/opt/iplanet6
#apr.home=${apache2.home}
#apr.include=${apr.home}/include
#apr-util.include=${apr.home}/include
#apr.lib=${apr.home}/lib
#apr-util.lib=${apr.home}/lib
#apache2.lib=${apache2.home}/lib(4) The tomcat connectors source will be compiled when Tomcat is
compiled.- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - B U I L D I N G T O M C A T U S I N G M A V E N - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Prequisites: 1) You have the JDK/SDK 1.3 or later installed. 2) You have ant installed (prerably 1.5.4). 3) Maven has been installed. 4) jakarta-tomcat-connectors has been setup. See above. 4) Your JAVA_HOME environment variable is set to the base of your java installation.
(1) Download Tomcat tarball
* Download jakarta-tomcat-4.1.27-src.tar.gz from:
http://mirrors.ccs.neu.edu/Apache/dist/jakarta/tomcat-4/source/
to:
pkgs/jakarta-tomcat
(2) Untar the Tomcat source tarball:
pkgs/jakarta-tomcat> tar zxf jakarta-tomcat-4.1.27-src.tar.gz
pkgs/jakarta-tomcat> mv jakarta-tomcat-4.1.27-src src(3) Setup maven files
* Create a pkgs/jakarta-tomcat/src/project.xml file so maven can automatically download dependent files (mostly jars) (see below). Dependencies can be found in:
pkgs/jakarta-tomcat/src/BUILDING.txt
and
pkgs/jakarta-tomcat/src/build.properties.sample
* Create a maven repository for the Tomcat dependency files:
pkgs/jakarta-tomcat> mkdir ../all-tomcat
pkgs/jakarta-tomcat> mkdir ../all-tomcat/src* Edit pkgs/jakarta-tomcat/src/project.properties with the following content:
maven.checkstyle.format = tomcat
maven.home.local = @maven.home.local@
maven.repo.remote.enabled = true
compile.debug = on
compile.optimize = off
compile.deprecation = off
version=4.1* Create a pkgs/jakarta-tomcat/src/maven.xml file so maven will initiate an ant build using the build.xml provided with Tomcat (see below). As part of initiating the ant build, you need to pass the new paths to the .jar dependency files as properties. Other hacks are needed as well, which are explained in the current maven.xml file.
* Create the /pkgs/jakarta-tomcat/src/build.properties file:
pkgs/jakarta-tomcat> cd src
pkgs/jakarta-tomcat/src> cp build.properties.sample \
build.propertiesand update these properties:
[EMAIL PROTECTED]@
base.path=${tomcat.path}/../all-tomcat/src/repository
jtc.home=${tomcat.path}/../jakarta-tomcat-connectors/src
jasper.home=${tomcat.path}/src/jasper@tomcat.path@ needs to be an absolute path to the tomcat build directory (eg. /usr/work/ted/smappsvr/pkgs/jakarta-tomcat). I have a shell script that figures out the path during compilation. You could just hard code the path if you want.
* Modify pkgs/jakarta-tomcat/src/jasper/build.xml as follows to add ant.jar to the classpath for building jasper (diff below):
<!-- Construct Jasper classpath -->
<path id="jasper.classpath">
+ <pathelement location="${ant.jar}"/>
<pathelement location="${servlet.jar}"/>
<pathelement location="${tools.jar}"/>(4) Build using maven
* Start maven build:
pkgs/jakarta-tomcat/src> path/to/maven/bin/maven
It will download most of the dependencies, but will fail to download these jars:
The build cannot continue because of the following unsatisfied
dependencies:dbcp-1.0.jar (try downloading from http://jakarta.apache.org/builds/jakarta-commons/release/commons-dbcp/v1.0/commons-dbcp-1.0.zip)
javamail-1.3.1.jar (try downloading from http://java.sun.com/products/javamail/)
jdbc-2.0.jar (try downloading from http://java.sun.com/products/jdbc/)
jaas-1.2.1.jar (try downloading from http://java.sun.com/products/jndi/)
jndi-1.2.1.jar (try downloading from http://java.sun.com/products/jndi/)
ldap-1.2.1.jar (try downloading from http://java.sun.com/products/jndi/)
jta-1.0.1a.jar (try downloading from http://java.sun.com/products/jta/)
Download those jars using the urls provided and place them in the appropriate directory under:
pkgs/all-tomcat/src/repository/<group>/jars
* Re-start the maven build:
pkgs/jakarta-tomcat/src> maven
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Diff after build:
pkgs/jakarta-tomcat> diff --brief -r src_right_after_untar src Only in src: build Only in src: build.properties Only in src/catalina: build Only in src/jasper: build Files src_right_after_untar/jasper/build.xml and src/jasper/build.xml differ Only in src: maven.log Only in src: maven.xml Only in src: project.properties Only in src: project.xml Only in src/webapps: build Only in src/webapps: dist
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pkgs/jakarta-tomcat/src/project.xml (below) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<?xml version="1.0" encoding="UTF-8"?>
<project>
<pomVersion>3</pomVersion>
<name>jakarta-tomcat-4</name>
<id>tomcat</id>
<currentVersion>4.1.27</currentVersion>
<organization>
<name>Apache Software Foundation</name>
<url>http://jakarta.apache.org/</url>
<logo>/images/jakarta-logo-blue.gif</logo>
</organization>
<logo>/images/blue-logo.gif</logo>
<inceptionYear>2000</inceptionYear>
<package>org.apache.tomcat</package><gumpRepositoryId>jakarta</gumpRepositoryId>
<shortDescription>A Servlet/JSP Container.</shortDescription>
<description>Tomcat is the servlet container that is used in the official Reference Implementation for the Java Servlet and JavaServer Pages technologies. The Java Servlet and JavaServer Pages specifications are developed by Sun under the Java Community Process.</description>
<url>http://jakarta.apache.org/tomcat/</url>
<issueTrackingUrl>http://scarab.werken.com/issue/</issueTrackingUrl>
<siteAddress>jakarta.apache.org</siteAddress>
<siteDirectory>/www/jakarta.apache.org/tomcat/tomcat-4.1.27/</siteDirectory>
<distributionDirectory>/www/www.apache.org/dist/jakarta/tomcat</distributionDirectory>
<repository>
<connection>scm:cvs:pserver:[EMAIL PROTECTED]:/home/cvspublic:jakarta-tomcat-4.0</connection>
<developerConnection>scm:cvs:ext:[EMAIL
PROTECTED]:/home/cvs:jakarta-tomcat-4.0</developerConnection>
<url>http://cvs.apache.org/viewcvs.cgi/jakarta-tomcat-4.0/</url>
</repository> <releases>
<release>
<version>4.1.27</version>
<tag>TOMCAT_4_1_27</tag>
</release>
<release>
<version>4.1.26</version>
<tag>TOMCAT_4_1_26</tag>
</release>
<release>
<version>4.1.25</version>
<tag>TOMCAT_4_1_25</tag>
</release>
<!-- etc -->
</releases> <mailingLists>
<mailingList>
<name>Tomcat User List</name>
<subscribe>[EMAIL PROTECTED]</subscribe>
<unsubscribe>[EMAIL PROTECTED]</unsubscribe><archive>http://mail-archives.apache.org/eyebrowse/[EMAIL PROTECTED]</archive> </mailingList> <mailingList> <name>Tomcat Developer List</name> <subscribe>[EMAIL PROTECTED]</subscribe> <unsubscribe>[EMAIL PROTECTED]</unsubscribe>
<archive>http://mail-archives.apache.org/eyebrowse/[EMAIL PROTECTED]</archive> </mailingList> </mailingLists>
<!-- Filler -->
<developers>
<developer>
<name>Joe Blow</name>
<id>joeblow</id>
<email>[EMAIL PROTECTED]</email>
<organization/>
</developer>
</developers> <!-- Filler -->
<contributors>
<contributor>
<name>Jane Blow</name>
<email>[EMAIL PROTECTED]</email>
</contributor>
</contributors><!-- Info pulled from /usr/work/ted/smo/pkgs/jakarta-tomcat/src/build.properties.sample -->
<dependencies>
<dependency>
<!-- Ant, version 1.5 or later -->
<groupId>ant</groupId>
<artifactId>ant</artifactId>
<version>1.5.2</version>
<url>http://jakarta.apache.org/builds/jakarta-ant/release/v1.5/bin/jakarta-ant-1.5-bin.tar.gz</url> </dependency> <dependency> <!-- Commons Beanutils, version 1.1 or later --> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.6.1</version>
<url>http://www.apache.org/dist/jakarta/commons/beanutils/binaries/commons-beanutils-1.6.1.tar.gz</url> </dependency> <dependency> <!-- Commons Collections, version 1.0 or later --> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>2.1</version>
<url>http://www.apache.org/dist/jakarta/commons/collections/binaries/collections-2.1.tar.gz</url> </dependency> <dependency> <!-- Commons Daemon, version 20020219 or later --> <groupId>commons-daemon</groupId> <artifactId>commons-daemon</artifactId> <version>1.0-dev.20021002.084851</version> <url>http://jakarta.apache.org/commons/daemon/</url> </dependency> <dependency> <!-- Commons Digester, version 1.1.1 or later --> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> <version>1.5</version>
<url>http://www.apache.org/dist/jakarta/commons/digester/binaries/commons-digester-1.5.tar.gz</url> </dependency> <dependency> <!-- Commons FileUpload, nightly build --> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.0</version>
<url>http://www.apache.org/dist/jakarta/commons/fileupload/commons-fileupload-1.0.tar.gz</url> </dependency> <dependency> <!-- Commons Logging, version 1.0.1 or later --> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.0.3</version>
<url>http://www.apache.org/dist/jakarta/commons/logging/binaries/commons-logging-1.0.3.tar.gz</url> </dependency> <dependency> <!-- Commons Logging, version 1.0.1 or later --> <groupId>commons-logging</groupId> <artifactId>commons-logging-api</artifactId> <version>1.0.3</version>
<url>http://www.apache.org/dist/jakarta/commons/logging/binaries/commons-logging-1.0.3.tar.gz</url> </dependency> <dependency> <!-- Commons Modeler, version 1.0 or later --> <groupId>commons-modeler</groupId> <artifactId>commons-modeler</artifactId> <version>1.1M1</version>
<url>http://jakarta.apache.org/builds/jakarta-commons/release/commons-modeler/v1.0/commons-modeler-1.0.tar.gz</url> </dependency> <dependency> <!-- Commons Pool, version 1.0 or later --> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.0.1</version>
<url>http://jakarta.apache.org/builds/jakarta-commons/release/commons-pool/v1.0.1/commons-pool-1.0.1.tar.gz</url> </dependency> <dependency> <!-- Commons DBCP, version 1.0 or later --> <groupId>dbcp</groupId> <artifactId>dbcp</artifactId> <version>1.0</version>
<url>http://jakarta.apache.org/builds/jakarta-commons/release/commons-dbcp/v1.0/commons-dbcp-1.0.zip</url>
</dependency>
<dependency>
<!-- Java Mail, version 1.2 or later -->
<groupId>javamail</groupId>
<artifactId>javamail</artifactId>
<version>1.3.1</version>
<url>http://java.sun.com/products/javamail/</url>
</dependency>
<dependency>
<!-- Java Database Connectivity (JDBC) Optional Package, version 2.0 -->
<groupId>jdbc</groupId>
<artifactId>jdbc</artifactId>
<version>2.0</version>
<url>http://java.sun.com/products/jdbc/</url>
</dependency>
<dependency>
<!-- Java Naming and Directory Interface (JNDI), version 1.2 or later -->
<groupId>jndi</groupId>
<artifactId>jaas</artifactId>
<version>1.2.1</version>
<url>http://java.sun.com/products/jndi/</url>
</dependency>
<dependency>
<!-- Java Naming and Directory Interface (JNDI), version 1.2 or later -->
<groupId>jndi</groupId>
<artifactId>jndi</artifactId>
<version>1.2.1</version>
<url>http://java.sun.com/products/jndi/</url>
</dependency>
<dependency>
<!-- Java Naming and Directory Interface (JNDI), version 1.2 or later -->
<groupId>jndi</groupId>
<artifactId>ldap</artifactId>
<version>1.2.1</version>
<url>http://java.sun.com/products/jndi/</url>
</dependency>
<!-- Java Secure Sockets Extension (JSSE), version 1.0.2 or later -->
<!-- http://java.sun.com/products/jsse/ -->
<!-- JSSE has been integrated into the Java 2 SDK, Standard Edition, v 1.4. -->
<dependency>
<!-- JUnit Unit Test Suite, version 3.7 or later -->
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<url>http://www.junit.org/</url>
</dependency>
<dependency>
<!-- Java Management Extensions (JMX), JMX RI 1.0.1 or later or MX4J 1.0 or later -->
<groupId>mx4j</groupId>
<artifactId>mx4j-tools</artifactId>
<version>1.1.1</version>
<url>http://telia.dl.sourceforge.net/sourceforge/mx4j/mx4j-1.1.1.tar.gz</url> </dependency> <dependency> <!-- Java Transaction API (JTA), version 1.0.1 or later --> <groupId>jta</groupId> <artifactId>jta</artifactId> <version>1.0.1a</version> <url>http://java.sun.com/products/jta/</url> </dependency> <dependency> <!-- Jakarta Regular Expressions Library, version 1.2 --> <groupId>regexp</groupId> <artifactId>regexp</artifactId> <version>1.2</version>
<url>http://jakarta.apache.org/builds/jakarta-regexp/release/v1.2/jakarta-regexp-1.2.tar.gz</url> </dependency> <dependency> <!-- Jakarta Servlet API Classes (Servlet 2.3 / JSP 1.2) --> <groupId>servletapi</groupId> <artifactId>servletapi</artifactId> <version>2.3</version> <url>http://java.sun.com/products/servlet/</url> </dependency> <dependency> <!-- Struts, version 1.0.1 or later --> <groupId>struts</groupId> <artifactId>struts</artifactId> <version>1.1</version>
<url>http://jakarta.apache.org/builds/jakarta-struts/release/v1.1/jakarta-struts-1.0.2.tar.gz</url> </dependency> <dependency> <!-- Struts, version 1.0.1 or later --> <groupId>struts</groupId> <artifactId>struts-bean</artifactId> <version>1.1</version> <type>tld</type> <properties> <war.bundle>true</war.bundle> </properties> </dependency> <dependency> <!-- Struts, version 1.0.1 or later --> <groupId>struts</groupId> <artifactId>struts-html</artifactId> <version>1.1</version> <type>tld</type> <properties> <war.bundle>true</war.bundle> </properties> </dependency> <dependency> <!-- Struts, version 1.0.1 or later --> <groupId>struts</groupId> <artifactId>struts-logic</artifactId> <version>1.1</version> <type>tld</type> <properties> <war.bundle>true</war.bundle> </properties> </dependency> <dependency> <!-- Tyrex Data Source, version 1.0 --> <groupId>tyrex</groupId> <artifactId>tyrex</artifactId> <version>1.0</version>
<url>http://belnet.dl.sourceforge.net/sourceforge/tyrex/tyrex-1.0.tgz</url> </dependency> <dependency> <!-- Xalan XSLT Processor --> <groupId>xalan</groupId> <artifactId>xalan</artifactId> <version>2.5.1</version>
<url>http://xml.apache.org/dist/xalan-j/xalan-j_2_5_1-bin.tar.gz</url> </dependency> <dependency> <!-- Xerces XML Parser, version 2.0.0 or later --> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.4.0</version>
<url>http://xml.apache.org/dist/xerces-j/Xerces-J-bin.2.4.0.tar.gz</url> </dependency> <dependency> <!-- Xerces XML Parser, version 2.0.0 or later --> <groupId>xerces</groupId> <artifactId>xmlParserAPIs</artifactId> <version>2.2.1</version>
<url>http://xml.apache.org/dist/xerces-j/Xerces-J-bin.2.4.0.tar.gz</url> </dependency> <dependency> <!-- --> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>1.0.b2</version> <url></url> </dependency> </dependencies>
</project>
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - pkgs/jakarta-tomcat/src/maven.xml (below) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:j="jelly:core" xmlns:m="maven" xmlns:u="jelly:util" xmlns:maven="jelly:maven" xmlns:ant="jelly:ant" default="build-all">
<goal name="build-all" description="Calls ant to build Tomcat">
<!-- Major hack - set jaxp properties as they are foobared -->${systemScope.setProperty('javax.xml.transform.TransformerFactory','org.apache.xalan.processor.TransformerFactoryImpl')}
<!-- servlet.jar needs to be in tomcat-connector's classpath -->
<copy
file="${pom.getDependencyPath('servletapi')}"
tofile="./build/common/lib/servlet.jar"
overwrite="false"/>
<ant antfile="build.xml" inheritAll="true">
<j:forEach var="dep" items="${pom.dependencies}">
<j:choose>
<j:when test="${dep.getType().equals('jar')}">
<j:set var="propertyName">${dep.getArtifactId()}.jar</j:set>
<j:set var="propertyValue">${pom.getDependencyPath(dep.getId())}</j:set>
</j:when>
<j:otherwise>
<j:set var="propertyName">${dep.getGroupId()}.lib</j:set>
<j:set var="propertyValue">${base.path}/${dep.getGroupId()}/${dep.getType()}s</j:set>
<!-- remove version number -->
<copy
file="${propertyValue}/${dep.getArtifactId()}-${dep.getVersion()}.${dep.getType()}"
tofile="${propertyValue}/${dep.getArtifactId()}.${dep.getType()}" overwrite="false"/>
</j:otherwise>
</j:choose>
<property name="${propertyName}" value="${propertyValue}"/>
<echo>property name="${propertyName}" value="${propertyValue}"</echo>
</j:forEach>
<property name="servlet.jar" value="${pom.getDependencyPath('servletapi')}"/>
<echo>property name="servlet.jar" value="${pom.getDependencyPath('servletapi')}"</echo>
<property name="ant.jar" value="${pom.getDependencyPath('ant')}"/>
<echo>property name="ant.jar" value="${pom.getDependencyPath('ant')}"</echo>
</ant>
</goal>
<goal name="Echo Dependencies">
<j:forEach var="dep" items="${pom.dependencies}">
<echo>${dep.getArtifactId()}</echo>
<echo>${pom.getDependencyPath(dep.getId())}</echo>
</j:forEach>
</goal>
</project>Sriram N wrote:
Hello:
Does anyone in our group use Maven to build Tomcat with ?
I'm trying to learn Maven, and would appreciate any kickstart that I get.
Thanks,
-- Sriram
__________________________________ Do you Yahoo!? Exclusive Video Premiere - Britney Spears http://launch.yahoo.com/promos/britneyspears/
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
