# -----------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.
# -----------------------------------------------------------------------

# ========================================================================
# This file specifies the classpaths to be used by the DUCC part of the 
# JD & JP that is isolated from the user's classpath.
# May have to be modified if any of the jars in DUCC_HOME/lib are changed.
# ========================================================================
 
ducc.reload.file = if set file is reloaded on every job

ducc.jobdriver.classpath = \
  ${DUCC_HOME}/lib/uima-ducc/*:\
  ${DUCC_HOME}/apache-uima/lib/uima-core.jar:\
  ${DUCC_HOME}/lib/apache-log4j/*:\
  ${DUCC_HOME}/webserver/lib/*:\
  ${DUCC_HOME}/apache-uima/apache-activemq/lib/*:\
  ${DUCC_HOME}/apache-uima/apache-activemq/lib/optional/*:\
  ${DUCC_HOME}/lib/apache-camel/*:\
  ${DUCC_HOME}/lib/apache-commons/*:\
  ${DUCC_HOME}/lib/google-gson/*:\
  ${DUCC_HOME}/lib/springframework/*

ducc.jobprocess.classpath = \
  ${DUCC_HOME}/lib/uima-ducc/*:\
  ${DUCC_HOME}/apache-uima/lib/uima-core.jar:\
  ${DUCC_HOME}/lib/apache-log4j/*:\
  ${DUCC_HOME}/webserver/lib/*:\
  ${DUCC_HOME}/apache-uima/apache-activemq/lib/*:\
  ${DUCC_HOME}/apache-uima/apache-activemq/lib/optional/*:\
  ${DUCC_HOME}/lib/apache-camel/*:\
  ${DUCC_HOME}/lib/apache-commons/*:\
  ${DUCC_HOME}/lib/springframework/*
  
