# This file is used by the artifact resolver for the packaging and assembly plugins.
# It contains a map of explicit versions to use for unversioned artifacts.
# Entries have the format:
#   groupid/artifactid//type=version 
#       or
#   groupid///=version (the former are checked first)
#
activeio///=2.0-r118
activemq///=3.2.4
geronimo///=1.1.1
openejb///=2.1.1
tranql/tranql//jar=1.3
tranql/connector//rar=1.2
tranql///=1.1

org.apache.geronimo.schema/geronimo-schema-j2ee1.4//jar=1.0

org.apache.geronimo.specs///=1.0.1

org.apache.geronimo.specs/geronimo-activation_1.0.2_spec//jar=1.1
org.apache.geronimo.specs/geronimo-commonj_1.1_spec//jar=1.0
org.apache.geronimo.specs/geronimo-corba_2.3_spec//jar=1.1
org.apache.geronimo.specs/geronimo-corba_3.0_spec//jar=1.1
org.apache.geronimo.specs/geronimo-j2ee_1.4_spec//jar=1.1
org.apache.geronimo.specs/geronimo-j2ee-jacc_1.0_spec//jar=1.1.1
org.apache.geronimo.specs/geronimo-javamail_1.3.1_spec//jar=1.1


ant///=1.6.5
antlr///=2.7.2
directory///=0.9.2
asm///=1.4.3
directory-asn1///=0.3.2
axis///=1.4
castor///=0.9.5.3
cglib///=2.1_3
commons_beanutils///=1.6.1
commons_cli///=1.0
commons_collections///=3.1
commons_digester///=1.6
commons_discovery///=0.2
commons_el///=1.0
commons_io///=1.1
commons_fileupload///=1.1
commons_httpclient///=2.0.1
commons_jelly///=1.0
commons_jxpath///=1.1
commons_lang///=2.0
commons_logging///=1.0.4
commons_modeler///=20060524
commons_primitives///=20041207.202534
commons_pool///=1.2
concurrent///=1.3.4
daytrader///=1.1
derby///=10.1.1.0
dom4j///=1.4
dwr///=1.0
eclipse_compiler///=3.0.1
howl///=0.1.11
#security:
hsqldb///=1.7.2.2
jasper///=5.5.15
javacc///=2.1
jdbm///=0.20-dev
jdom///=1.0
jelly_velocity_tags///=1.0
jetty///=5.1.10
jstl///=1.1.1
juddi///=0.9rc4
junit///=3.8.1
kerberos_common///=0.5
kerberos_protocols///=0.5
ldap_protocols///=0.9.2
log4j///=1.2.8
maven_itest_plugin///=1.0
maven///=1.0.2
mina///=0.7.3
mockobjects///=0.09
mx4j///=3.0.1
oro///=2.0.8
pluto///=1.0.1
portlet_api///=1.0
p2psockets///=1.1.2
regexp///=1.3
scout///=0.5
slf4j///=1.0-beta7
standard_taglibs///=1.1.1
stax/stax//jar=1.1.2-dev
stax/stax_api//jar=1.0.1
tomcat_ajp///=5.5.15
tomcat///=5.5.15
tomcat_servlet_examples///=5.5.15
tomcat_jsp_examples///=5.5.15
wadi///=2.0M1
wadi_activecluster///=1.2-20051115174934
wadi_spring///=1.2.5
velocity///=1.4
wsdl4j///=1.5.2
xerces/xercesImpl//jar=2.6.2
xerces/xmlParserAPIs//jar=2.2.1
xfire///=20050202
xml_apis///=1.0.b2
xml_resolver///=1.1
xml_parser_apis///=2.2.1
xmlbeans///=2.0.0
xmlpull///=1.1.3.4d_b4_min
xpp3///=1.1.3.3
xstream///=1.1.3
