#    Copyright 2003-2005 The Apache Software Foundation
#
#    Licensed under the Apache License, Version 2.0 (the "License");
#    you may not use this file except in compliance with the License.
#    You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#    Unless required by applicable law or agreed to in writing, software
#    distributed under the License is distributed on an "AS IS" BASIS,
#    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#    See the License for the specific language governing permissions and
#    limitations under the License.

#These properties can be set in a project.properties file or in an invocation in maven.xml
#dependencies marked with the property <xmlbeans>true</xmlbeans> will get included in the xmlbeans classpath
#so you can reuse your xmlbeans generated classes.

#a typical invocation looks like:
#<project default="default"
#    xmlns:xmlbeans="xmlbeans2:maven">
#
#    <preGoal name="java:compile">
#        <xmlbeans:schema2java
#            maven.xmlbeans2.sourceschema="application_1_4.xsd,j2ee_jaxrpc_mapping_1_1.xsd"
#            maven.xmlbeans2.cataloglocation="${basedir}/src/catalog/resolver-catalog.xml"/>
#    </preGoal>


#base location for schemas to compile
maven.xmlbeans2.sourcedir=${basedir}/src/schema

#comma separated list of schemas to compile, relative to sourcedir above. You must specify this explicitly
maven.xmlbeans2.sourceschema=

#location of the xmlbeans configuration file
maven.xmlbeans2.xmlconfigs=${basedir}/src/schema/xmlconfig.xml

#location of an xml catalog. If you use one, you must specify the location yourself.
maven.xmlbeans2.cataloglocation=

#target directory for generated java code.  Binary artifacts are place directly into target/classes.
maven.xmlbeans2.targetdir=${basedir}/target/xmlbeans

#default base location where schemas will be copied. Unlike the ant task,
#they will include the path of the schema listed in the sourceSchemas parameter.
maven.xmlbeans2.baseSchemaLocation=schemaorg_apache_xmlbeans/src



