# 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.


name=apache-nutch
version=2.3.1
final.name=${name}-${version}
year=2015

basedir = ./
src.dir = ./src/java
lib.dir = ./lib
conf.dir = ./conf
plugins.dir = ./src/plugin

build.dir = ./build
build.classes = ${build.dir}/classes
build.plugins = ${build.dir}/plugins
build.javadoc = ${build.dir}/docs/api
build.encoding = UTF-8
build.ivy.dir=${build.dir}/ivy
build.lib.dir=${build.dir}/lib
build.gora=${build.dir}/gora

test.src.dir = ./src/test
test.build.dir = ${build.dir}/test
test.build.data =  ${test.build.dir}/data
test.build.classes = ${test.build.dir}/classes
test.build.javadoc = ${test.build.dir}/docs/api

# Proxy Host and Port to use for building JavaDoc
javadoc.proxy.host=-J-DproxyHost=
javadoc.proxy.port=-J-DproxyPort=
javadoc.link.java=http://docs.oracle.com/javase/7/docs/api/
javadoc.link.hadoop=http://hadoop.apache.org/docs/r1.2.0/api/
javadoc.packages=org.apache.nutch.*

dist.dir=./dist
src.dist.version.dir=${dist.dir}/${final.name}-src
bin.dist.version.dir=${dist.dir}/${final.name}-bin

javac.debug=on
javac.optimize=on
javac.deprecation=on
javac.version= 1.7

runtime.dir=./runtime
runtime.deploy=${runtime.dir}/deploy
runtime.local=${runtime.dir}/local

ivy.version=2.3.0
ivy.dir=${basedir}/ivy
ivy.file=${ivy.dir}/ivy.xml
ivy.jar=${ivy.dir}/ivy-${ivy.version}.jar
ivy.repo.url=http://repo2.maven.org/maven2/org/apache/ivy/ivy/${ivy.version}/ivy-${ivy.version}.jar

ivy.local.default.root=${ivy.default.ivy.user.dir}/local
ivy.local.default.ivy.pattern=[organisation]/[module]/[revision]/[type]s/[artifact].[ext]
ivy.local.default.artifact.pattern=[organisation]/[module]/[revision]/[type]s/[artifact].[ext]

ivy.shared.default.root=${ivy.default.ivy.user.dir}/shared
ivy.shared.default.ivy.pattern=[organisation]/[module]/[revision]/[type]s/[artifact].[ext]
ivy.shared.default.artifact.pattern=[organisation]/[module]/[revision]/[type]s/[artifact].[ext]

#
# Plugins API
#
plugins.api=\
   org.apache.nutch.protocol.http.api*:\
   org.apache.nutch.urlfilter.api*

#
# Protocol Plugins
#
plugins.protocol=\
   org.apache.nutch.protocol.file*:\
   org.apache.nutch.protocol.ftp*:\
   org.apache.nutch.protocol.http*:\
   org.apache.nutch.protocol.httpclient*:\
   org.apache.nutch.protocol.sftp*

#
# URL Filter Plugins
#
plugins.urlfilter=\
   org.apache.nutch.urlfilter.automaton*:\
   org.apache.nutch.urlfilter.domain*:\
   org.apache.nutch.urlfilter.prefix*:\
   org.apache.nutch.urlfilter.regex*:\
   org.apache.nutch.urlfilter.suffix*:\
   org.apache.nutch.urlfilter.validator*

#
# URL Normalizer Plugins
#
plugins.urlnormalizer=\
   org.apache.nutch.net.urlnormalizer.basic*:\
   org.apache.nutch.net.urlnormalizer.host*:\
   org.apache.nutch.net.urlnormalizer.pass*:\
   org.apache.nutch.net.urlnormalizer.querystring*:\
   org.apache.nutch.net.urlnormalizer.regex*

#
# Scoring Plugins
#
plugins.scoring=\
   org.apache.nutch.scoring.depth*:\
   org.apache.nutch.scoring.link*:\
   org.apache.nutch.scoring.opic*:\
   org.apache.nutch.scoring.tld*

#
# Parse Plugins
#
plugins.parse=\
   org.apache.nutch.parse.html*:\
   org.apache.nutch.parse.js:\
   org.apache.nutch.parse.tika
#   org.apache.nutch.parse.ext*:\
#   org.apache.nutch.parse.feed*:\
#   org.apache.nutch.parse.swf*:\
#   org.apache.nutch.parse.zip
   
#
# Parse Filter Plugins
#
plugins.parsefilter=\
   org.apache.nutch.parse.metatags*

#
# Indexing Filter Plugins
#
plugins.index=\
   org.apache.nutch.indexer.anchor*:\
   org.apache.nutch.indexer.basic*:\
   org.apache.nutch.indexer.feed*:\
   org.apache.nutch.indexer.html*:\
   org.apache.nutch.indexer.metadata*:\
   org.apache.nutch.indexer.more*:\
   org.apache.nutch.indexer.subcollection*:\
   org.apache.nutch.indexer.tld*

# Indexing Backend Plugins
#
plugins.indexer=\
   org.apache.nutch.indexwriter.elastic*:\
   org.apache.nutch.indexwriter.solr*

#
# Misc. Plugins
#
# (gathers plugins that cannot be dispatched
# in any category, mainly because they contain
# many extension points)
#
plugins.misc=\
   org.apache.nutch.collection*:\
   org.apache.nutch.analysis.lang*:\
   org.creativecommons.nutch*:\
   org.apache.nutch.microformats.reltag*
   
