###############################################################################
# Copyright (c) 2000, 2007 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
#
# Contributors:
#     IBM Corporation - initial API and implementation
###############################################################################

InternalAntRunner_Build_file___0__1=Buildfile: {0}
InternalAntRunner_Arguments___0__2=Arguments: {0}
InternalAntRunner_Unable_to_instantiate_logger___0__6=Unable to instantiate logger: {0}
InternalAntRunner_Could_not_load_the_version_information___0__9=Could not load the version information. {0}
InternalAntRunner_Could_not_load_the_version_information__10=Could not load the version information.
InternalAntRunner_Using__0__file_as_build_log__1=Using {0} file as build log.
InternalAntRunner_Could_not_write_to_the_specified_log_file___0___Make_sure_the_path_exists_and_you_have_write_permissions__2=Cannot write on the specified log file: {0}. Make sure the path exists and you have write permissions.
InternalAntRunner_BUILD_SUCCESSFUL_1=BUILD SUCCESSFUL
InternalAntRunner_Unknown_argument___0__2=Unknown argument: {0}
InternalAntRunner_Buildfile___0__does_not_exist___1=Buildfile: {0} does not exist
InternalAntRunner__0__which_was_specified_to_be_a_build_listener_is_not_an_instance_of_org_apache_tools_ant_BuildListener__1={0} which was specified to be a build listener is not an instance of org.apache.tools.ant.BuildListener.
InternalAntRunner__0__which_was_specified_to_perform_logging_is_not_an_instance_of_org_apache_tools_ant_BuildLogger__2={0} which was specified to perform logging is not an instance of org.apache.tools.ant.BuildLogger.
InternalAntRunner_You_must_specify_a_classname_when_using_the__listener_argument_1=You must specify a classname when using the -listener argument
InternalAntRunner_You_must_specify_a_classname_when_using_the__logger_argument_2=You must specify a classname when using the -logger argument
InternalAntRunner_You_must_specify_a_log_file_when_using_the__log_argument_3=You must specify a log file when using the -log argument
InternalAntRunner_You_must_specify_a_buildfile_when_using_the__buildfile_argument_4=You must specify a buildfile when using the -buildfile argument
InternalAntRunner_Class__0__not_found_for_task__1__1=Class {0} not found for task {1}
InternalAntRunner_Class__0__not_found_for_type__1__2=Class {0} not found for type {1}
InternalAntRunner_Only_one_logger_class_may_be_specified_1=Only one logger class may be specified
InternalAntRunner_You_must_specify_a_classname_when_using_the__inputhandler_argument_1=You must specify a classname when using the -inputhandler argument
InternalAntRunner_Only_one_input_handler_class_may_be_specified__2=Only one input handler class may be specified.
InternalAntRunner_You_must_specify_a_property_filename_when_using_the__propertyfile_argument_3=You must specify a property filename when using the -propertyfile argument
InternalAntRunner_4=Could not load property file: {0}
InternalAntRunner_3=Run with at least Ant 1.7.0 to print project help information
InternalAntRunner_2=Run with at least Ant 1.7.0 to print the help message
InternalAntRunner_The_specified_input_handler_class__0__does_not_implement_the_org_apache_tools_ant_input_InputHandler_interface_5=The specified input handler class {0} does not implement the org.apache.tools.ant.input.InputHandler interface
InternalAntRunner_Unable_to_instantiate_specified_input_handler_class__0_____1__6=Unable to instantiate specified input handler class {0} : {1}
InternalAntRunner_Specifying_an_InputHandler_is_an_Ant_1_5___feature__Please_update_your_Ant_classpath_to_include_an_Ant_version_greater_than_this__2=Specifying an InputHandler is an Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this.
InternalAntRunner_The_diagnositics_options_is_an_Ant_1_5___feature__Please_update_your_Ant_classpath_to_include_an_Ant_version_greater_than_this__4=The diagnostics options is an Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this.
InternalAntRunner_Specifying_property_files_is_a_Ant_1_5___feature__Please_update_your_Ant_classpath__6=Specifying property files is a Ant 1.5.* feature. Please update your Ant classpath to include an Ant version greater than this.
InternalAntRunner_Default_target__0__1__2__does_not_exist_in_this_project_1=Default target {0}{1}{2} does not exist in this project
InternalAntRunner_ANT_HOME_must_be_set_to_use_Ant_diagnostics_2=ANT_HOME must be set to use Ant diagnostics
InternalAntRunner_Buildfile___0__is_not_a_file_1=Buildfile: {0} is not a file
InternalAntRunner__find_not_supported=-find not supported.\nCan be emulated using Run As > Ant Build located\nin the Run > External Tools menu
InternalAntRunner_Error_setting_Ant_task=Error setting Ant task {0}
InternalAntRunner_Missing_Class=Could not load a class required for parsing targets
InternalAntRunner_157=-lib not supported\nConfigure the Ant runtime classpath using either the\nglobal Ant runtime classpath or the Ant runtime classpath\n for this particular build

ProgressBuildListener_Build_cancelled__5=Build cancelled.

InternalProject_0=Could not create type {0} due to {1}
