Using the repository to manage thirdparty jars
This page provides a build-thirdparty.xml example with targets for generating a thirdparty jar tree and license info based on declarative component dependency statements. To use the thirdparty repository to manage your project thirdparty jars/licenses, you need to use the jbossbuild tasks. To do this:
Integrate the tools module into your project. This contains the jbossbuild.jar and tasks.xml. For example, the jbossas jboss-head module alias definition
jboss-head -d jboss-head \ &tools \ ...
cvs co tools can also be used to pull the content into an existing cvs workspace.
Create a build/build-thirdparty.xml similar to the following:
<?xml version="1.0"?> <project name="main.build" default="synchronize" basedir="."> <!-- Property File definitions --> <property file="local.properties"></property> <property file="synchronize.properties"></property> <property environment="env"></property> <!-- Property Definitions --> <property name="generatedLibrariesFiles" value="../thirdparty/libraries.ent"></property> <!-- Allow jbossbuild.repository to be set from (in order or priority) + Command line -Djbossbuild.repository=... + synchronize.properties jbossbuild.repository setting + JBOSS_REPOSITORY environment variable --> <condition property="jbossbuild.repository" value="${env.JBOSS_REPOSITORY}"> <isset property="env.JBOSS_REPOSITORY"></isset> </condition> <!-- Fall back to default --> <property name="jbossbuild.repository" value="http://repository.jboss.com"></property> <!-- File Imports --> <import file="../tools/etc/jbossbuild/tasks.xml"></import> <!-- Main Definition of dependencies --> <build id="jbosscache-thirdparty" impltitle="JBossCache" implversion="jboss-head" implvendor="JBoss Inc." implurl="http://www.jboss.org" description="JBoss Cache" cvsroot="${cvs.prefix}@cvs.forge.jboss.com:/cvsroot/jboss" thirdpartypath="../thirdparty/" location="${jbossbuild.repository}" targetdefs="targets"> <!-- The repository is in CVS under the module repository.jboss.com whose contents are pushed to the http://repository.jboss.com site. --> <componentref name="apache-bsf" version="2.3.0"></componentref> <componentref name="apache-log4j" version="1.2.8"></componentref> <componentref name="apache-logging" version="1.0.4jboss"></componentref> <componentref name="apache-xalan" version="j_2.6.0"></componentref> <componentref name="beanshell" version="1.3.0"></componentref> <componentref name="javassist" version="3.1RC2"></componentref> <componentref name="jfreechart" version="0.9.20"></componentref> <componentref name="jgroups" version="2.2.8"></componentref> <componentref name="junit" version="3.8.1"></componentref> <componentref name="oswego-concurrent" version="1.3.4"></componentref> <componentref name="qdox" version="1.4"></componentref> <componentref name="sleepycat" version="1.7.0"></componentref> <componentref name="trove" version="2.1.1"></componentref> </build> <synchronizeinfo></synchronizeinfo> <!-- Generate the targets --> <generate generate="jbosscache-thirdparty"></generate> <target name="generate-lib-file" description="generate libraries.ent and thirdparty license info" depends="synchronize"> <gen-lib-file filename="${generatedLibrariesFiles}" ></gen-lib-file> <visit-componentref-graph componentVisitor="org.jboss.ant.util.graph.ComponentRefGraphLicenseVisitor" ></visit-componentref-graph> </target> </project>
The default target jbosscache-thirdparty creates a thirdparty directory (../thirdparty relative to the build file) that contains the repository jars declared by the componentref elements. the generate-lib-file target:
generates a thirdparty/libraries.ent with the classpath definitions for the various components refs and their dependents. For the above components the following libraries.ent is generated:
<!-- apache-bsf --> <property name="apache.bsf.root" value="${project.thirdparty}/apache-bsf"></property> <property name="apache.bsf.lib" value="${apache.bsf.root}/lib/"></property> <property name="apache.bsf.resources" value="${apache.bsf.root}/resources/"></property> <path id="apache.bsf.classpath"> <pathelement path="${apache.bsf.lib}/bsf.jar"></pathelement> </path> <!-- apache-log4j --> <property name="apache.log4j.root" value="${project.thirdparty}/apache-log4j"></property> <property name="apache.log4j.lib" value="${apache.log4j.root}/lib/"></property> <property name="apache.log4j.resources" value="${apache.log4j.root}/resources/"></property> <path id="apache.log4j.classpath"> <pathelement path="${apache.log4j.lib}/log4j.jar"></pathelement> </path> <!-- apache-logging --> <property name="apache.logging.root" value="${project.thirdparty}/apache-logging"></property> <property name="apache.logging.lib" value="${apache.logging.root}/lib/"></property> <property name="apache.logging.resources" value="${apache.logging.root}/resources/"></property> <path id="apache.logging.classpath"> <pathelement path="${apache.logging.lib}/commons-logging.jar"></pathelement> </path> <!-- apache-xalan --> <property name="apache.xalan.root" value="${project.thirdparty}/apache-xalan"></property> <property name="apache.xalan.lib" value="${apache.xalan.root}/lib/"></property> <property name="apache.xalan.resources" value="${apache.xalan.root}/resources/"></property> <path id="apache.xalan.classpath"> <pathelement path="${apache.xalan.lib}/xalan.jar"></pathelement> </path> <!-- beanshell --> <property name="beanshell.beanshell.root" value="${project.thirdparty}/beanshell"></property> <property name="beanshell.beanshell.lib" value="${beanshell.beanshell.root}/lib/"></property> <property name="beanshell.beanshell.resources" value="${beanshell.beanshell.root}/resources/"></property> <path id="beanshell.beanshell.classpath"> <pathelement path="${beanshell.beanshell.lib}/bsh-1.3.0.jar"></pathelement> </path> <!-- javassist --> <property name="javassist.javassist.root" value="${project.thirdparty}/javassist"></property> <property name="javassist.javassist.lib" value="${javassist.javassist.root}/lib/"></property> <property name="javassist.javassist.resources" value="${javassist.javassist.root}/resources/"></property> <path id="javassist.javassist.classpath"> <pathelement path="${javassist.javassist.lib}/javassist.jar"></pathelement> </path> <!-- jfreechart --> <property name="jfreechart.jfreechart.root" value="${project.thirdparty}/jfreechart"></property> <property name="jfreechart.jfreechart.lib" value="${jfreechart.jfreechart.root}/lib/"></property> <property name="jfreechart.jfreechart.resources" value="${jfreechart.jfreechart.root}/resources/"></property> <path id="jfreechart.jfreechart.classpath"> <pathelement path="${jfreechart.jfreechart.lib}/jfreechart.jar"></pathelement> <pathelement path="${jfreechart.jfreechart.lib}/jcommon.jar"></pathelement> </path> <!-- jgroups --> <property name="jgroups.jgroups.root" value="${project.thirdparty}/jgroups"></property> <property name="jgroups.jgroups.lib" value="${jgroups.jgroups.root}/lib/"></property> <property name="jgroups.jgroups.resources" value="${jgroups.jgroups.root}/resources/"></property> <path id="jgroups.jgroups.classpath"> <pathelement path="${jgroups.jgroups.lib}/jgroups.jar"></pathelement> </path> <!-- junit --> <property name="junit.junit.root" value="${project.thirdparty}/junit"></property> <property name="junit.junit.lib" value="${junit.junit.root}/lib/"></property> <property name="junit.junit.resources" value="${junit.junit.root}/resources/"></property> <path id="junit.junit.classpath"> <pathelement path="${junit.junit.lib}/junit.jar"></pathelement> </path> <!-- oswego-concurrent --> <property name="oswego.concurrent.root" value="${project.thirdparty}/oswego-concurrent"></property> <property name="oswego.concurrent.lib" value="${oswego.concurrent.root}/lib/"></property> <property name="oswego.concurrent.resources" value="${oswego.concurrent.root}/resources/"></property> <path id="oswego.concurrent.classpath"> <pathelement path="${oswego.concurrent.lib}/concurrent.jar"></pathelement> </path> <!-- qdox --> <property name="qdox.qdox.root" value="${project.thirdparty}/qdox"></property> <property name="qdox.qdox.lib" value="${qdox.qdox.root}/lib/"></property> <property name="qdox.qdox.resources" value="${qdox.qdox.root}/resources/"></property> <path id="qdox.qdox.classpath"> <pathelement path="${qdox.qdox.lib}/qdox.jar"></pathelement> </path> <!-- sleepycat --> <property name="sleepycat.sleepycat.root" value="${project.thirdparty}/sleepycat"></property> <property name="sleepycat.sleepycat.lib" value="${sleepycat.sleepycat.root}/lib/"></property> <property name="sleepycat.sleepycat.resources" value="${sleepycat.sleepycat.root}/resources/"></property> <path id="sleepycat.sleepycat.classpath"> <pathelement path="${sleepycat.sleepycat.lib}/je.jar"></pathelement> </path> <!-- trove --> <property name="trove.trove.root" value="${project.thirdparty}/trove"></property> <property name="trove.trove.lib" value="${trove.trove.root}/lib/"></property> <property name="trove.trove.resources" value="${trove.trove.root}/resources/"></property> <path id="trove.trove.classpath"> <pathelement path="${trove.trove.lib}/trove.jar"></pathelement> </path> <!-- list of aliases used to bridge gap between buildmagic defs and jbossbuild --> <path id="apache.commons.classpath"> <pathelement path="${apache.collections.lib}/commons-collections.jar"></pathelement> <pathelement path="${apache.logging.lib}/commons-logging.jar"></pathelement> <pathelement path="${apache.httpclient.lib}/commons-httpclient.jar"></pathelement> <pathelement path="${apache.pool.lib}/commons-pool.jar"></pathelement> <pathelement path="${apache.discovery.lib}/commons-discovery.jar"></pathelement> <pathelement path="${apache.fileupload.lib}/commons-fileupload.jar"></pathelement> <pathelement path="${apache.lang.lib}/commons-lang-2.0.jar"></pathelement> </path> <path id="sax.classpath"> <pathelement path="${xml-sax.classpath}"></pathelement> </path> <property name="xdoclet-xdoclet.lib" value="${xdoclet.xdoclet.lib}"></property> <path id="xdoclet.task.classpath"> <path refid="xdoclet.xdoclet.classpath"></path> </path> <property name="gjt.jpl-util.lib" value="${gjt.jpl.util.lib}"></property> <path id="gjt.jpl-util.classpath"> <path refid="gjt.jpl.util.classpath"></path> </path> <property name="opennms.joesnmp.lib" value="${joesnmp.joesnmp.lib}"></property> <path id="opennms.joesnmp.classpath"> <path refid="joesnmp.joesnmp.classpath"></path> </path> <path id="jacorb.idl.classpath"> <path refid="apache.avalon.logkit.classpath"></path> <pathelement path="${jacorb.jacorb.lib}/idl.jar"></pathelement> </path> <property name="jacorb.idl.include" value="${jacorb.jacorb.resources}"></property> <property name="jacorb.jacorb.properties" value="${jacorb.jacorb.resources}"></property> <property name="sleepycat.lib" value="${sleepycat.sleepycat.lib}"></property> <path id="sleepycat.classpath"> <path refid="sleepycat.sleepycat.classpath"></path> </path> <property name="apache.tomcat55.root" value="${apache.tomcat.root}"></property> <property name="apache.tomcat55.lib" value="${apache.tomcat.lib}"></property> <path id="apache.tomcat55.classpath"> <path refid="apache.tomcat.classpath"></path> </path> <property name="trove.lib" value="${trove.trove.lib}"></property> <path id="trove.classpath"> <path refid="trove.trove.classpath"></path> </path> <path id="qdox.classpath"> <path refid="qdox.qdox.classpath"></path> </path> <property name="javassist.lib" value="${javassist.javassist.lib}"></property> <path id="javassist.classpath"> <path refid="javassist.javassist.classpath"></path> </path> <property name="hibernate.lib" value="${hibernate.hibernate.lib}"></property> <path id="hibernate3.classpath"> <path refid="hibernate.hibernate.classpath"></path> </path> <property name="odmg.lib" value="${odmg.odmg.lib}"></property> <path id="odmg.classpath"> <path refid="odmg.odmg.classpath"></path> </path> <property name="cglib.lib" value="${cglib.cglib.lib}"></property> <path id="cglib.classpath"> <path refid="cglib.cglib.classpath"></path> </path> <path id="ejb3-persistence.classpath"> <path refid="hibernate.annotations.classpath"></path> <path refid="hibernate.entitymanager.classpath"></path> </path> <property name="spring.lib" value="${spring.spring.lib}"></property> <path id="spring.classpath"> <path refid="spring.spring.classpath"></path> </path> <!-- Ant --> <property name="apache.ant.root" value="${project.tools}"></property> <property name="apache.ant.lib" value="${apache.ant.root}/lib"></property> <path id="apache.ant.classpath"> <pathelement path="${apache.ant.lib}/ant.jar"></pathelement> </path>
generate a ../thirdparty/licenses directory that contains all licenses for the thirdparty components.
[sstark@sstark build]$ ls ../thirdparty/licenses/ apache-1.1.txt* cpl-1.0.txt* lgpl.txt* oswego.txt* apache-2.0.txt* ironsmith.txt* license-info.xml* thirdparty-licenses.xml*
generates a ../thirdparty/licenses/thirdparty-licenses.xml summary file that
<thirdparty-licenses> <module name='jgroups' licenseType='lgpl' version='2.2.8' projectHome='http://www.jgroups.org' description='JGroups is a toolkit for reliable multicast communication'> <jar name='jgroups.jar' ></jar> </module> <module name='apache-bsf' licenseType='apache-1.1' version='2.3.0' projectHome='http://jakarta.apache.org/bsf/' description='no description'> <jar name='bsf.jar' ></jar> </module> <module name='qdox' licenseType='ironsmith' version='1.4' projectHome='http://qdox.codehaus.org/' description='Parser for extracting class/interface/method definitions from source files complete with JavaDoc @tags.'> <jar name='qdox.jar' ></jar> </module> <module name='oswego-concurrent' licenseType='oswego' version='1.3.4' projectHome='http://gee.cs.oswego.edu/dl/classes/EDU/oswego/cs/dl/util/concurrent/intro.html' description='Oswego util.concurrent package'> <jar name='concurrent.jar' ></jar> </module> <module name='beanshell' licenseType='lgpl' version='1.3.0' projectHome='http://www.beanshell.org/' description='Lightweight Scripting for Java'> <jar name='bsh-1.3.0.jar' ></jar> </module> <module name='trove' licenseType='lgpl' version='2.1.1' projectHome='http://trove4j.sourceforge.net/' description='High performance collections for Java'> <jar name='trove.jar' ></jar> </module> <module name='jfreechart' licenseType='lgpl' version='0.9.20' projectHome='http://www.jfree.org/jfreechart/' description='A free Java class library for generating charts, including'> <jar name='jfreechart.jar' ></jar> <jar name='jcommon.jar' ></jar> </module> <module name='junit' licenseType='cpl-1.0' version='3.8.1' projectHome='http://www.junit.org/index.htm' description='Java unit testing framework'> <jar name='junit.jar' ></jar> </module> <module name='apache-logging' licenseType='apache-2.0' version='1.0.4jboss' projectHome='http://jakarta.apache.org/commons/logging/' description='Yet another logging api. Patched to use a WeakHashMap such that it does not hold hard references to the classloaders.'> <jar name='commons-logging.jar' ></jar> </module> <module name='apache-xalan' licenseType='apache-2.0' version='j_2.6.0' projectHome='http://xml.apache.org/xalan-j/' description='Xalan-Java is an XSLT processor for transforming XML documents'> <jar name='xalan.jar' ></jar> </module> <module name='apache-log4j' licenseType='apache-2.0' version='1.2.8' projectHome='http://logging.apache.org/' description='Java logging framework'> <jar name='log4j.jar' ></jar> <jar name='snmpTrapAppender.jar' ></jar> </module> <module name='javassist' licenseType='mozilla-1.0.1.txt' version='3.1RC2' projectHome='http://sourceforge.net/projects/jboss' description='Simple Java bytecode manipulation'> <jar name='javassist.jar' ></jar> </module> <module name='sleepycat' licenseType='null' version='1.7.0' projectHome='http://www.sleepycat.com' description='Used for Sleepcat-based CacheLoader (org.jboss.cache.loader.bdbje.BdbjeCacheLoader)'> <jar name='je.jar' ></jar> </module> </thirdparty-licenses>
Comments