#
# Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

error.multiple.main.operations=\
     You may not specify more than one '-cuxtid' options
error.cant.open=\
     can''t open: {0}
error.illegal.option=\
        Illegal option: {0}
error.unrecognized.option=\
    unrecognized option : {0}
error.missing.arg=\
     option {0} requires an argument
error.bad.file.arg=\
     Error parsing file arguments
error.bad.option=\
        One of options -{ctxuid} must be specified.
error.bad.cflag=\
        'c' flag requires manifest or input files to be specified!
error.bad.uflag=\
        'u' flag requires manifest, 'e' flag or input files to be specified!
error.bad.eflag=\
	'e' flag and manifest with the 'Main-Class' attribute cannot be specified \n\
	 together!
error.bad.dflag=\
        '-d, --print-module-descriptor' option requires no input file(s) to be specified: {0}
error.bad.reason=\
        bad reason: {0}, must be one of deprecated, deprecated-for-removal, or incubating
error.nosuch.fileordir=\
        {0} : no such file or directory
error.write.file=\
        Error in writing existing jar file
error.create.dir=\
        {0} : could not create directory
error.incorrect.length=\
        incorrect length while processing: {0}
error.create.tempfile=\
        Could not create a temporary file
error.hash.dep=\
        Hashing module {0} dependences, unable to find module {1} on module path
error.module.options.without.info=\
        One of --module-version or --hash-modules without module-info.class
error.unexpected.module-info=\
        Unexpected module descriptor {0}
error.module.descriptor.not.found=\
        Module descriptor not found
error.invalid.versioned.module.attribute=\
        Invalid module descriptor attribute {0}
error.missing.provider=\
        Service provider not found: {0}
error.release.value.notnumber=\
        release {0} not valid
error.release.value.toosmall=\
        release {0} not valid, must be >= 9
error.release.unexpected.versioned.entry=\
        unexpected versioned entry {0} for release {1}
error.validator.jarfile.exception=\
        can not validate {0}: {1}
error.validator.jarfile.invalid=\
        invalid multi-release jar file {0} deleted
error.validator.bad.entry.name=\
        entry name malformed, {0}
error.validator.version.notnumber=\
        entry name: {0}, does not have a version number
error.validator.entryname.tooshort=\
        entry name: {0}, too short, not a directory
error.validator.isolated.nested.class=\
        entry: {0}, is an isolated nested class
error.validator.new.public.class=\
        entry: {0}, contains a new public class not found in base entries
error.validator.incompatible.class.version=\
        entry: {0}, has a class version incompatible with an earlier version
error.validator.different.api=\
        entry: {0}, contains a class with different api from earlier version
error.validator.names.mismatch=\
        entry: {0}, contains a class with internal name {1}, names do not match
error.validator.info.name.notequal=\
        module-info.class in a versioned directory contains incorrect name
error.validator.info.requires.transitive=\
        module-info.class in a versioned directory contains additional "requires transitive"
error.validator.info.requires.added=\
        module-info.class in a versioned directory contains additional "requires"
error.validator.info.requires.dropped=\
        module-info.class in a versioned directory contains missing "requires"
error.validator.info.exports.notequal=\
        module-info.class in a versioned directory contains different "exports"
error.validator.info.opens.notequal=\
        module-info.class in a versioned directory contains different "opens"
error.validator.info.provides.notequal=\
        module-info.class in a versioned directory contains different "provides"
error.validator.info.version.notequal=\
        {0}: module-info.class in a versioned directory contains different "version"
error.validator.info.manclass.notequal=\
        {0}: module-info.class in a versioned directory contains different "main-class"
warn.validator.identical.entry=\
        Warning: entry {0} contains a class that\n\
        is identical to an entry already in the jar
warn.validator.resources.with.same.name=\
        Warning: entry {0}, multiple resources with same name
warn.validator.concealed.public.class=\
        Warning: entry {0} is a public class\n\
        in a concealed package, placing this jar on the class path will result\n\
        in incompatible public interfaces
warn.release.unexpected.versioned.entry=\
        unexpected versioned entry {0}
out.added.manifest=\
        added manifest
out.added.module-info=\
        added module-info: {0}
out.update.manifest=\
        updated manifest
out.update.module-info=\
        updated module-info: {0}
out.ignore.entry=\
        ignoring entry {0}
out.adding=\
        adding: {0}
out.deflated=\
        (deflated {0}%)
out.stored=\
        (stored 0%)
out.create=\
        \ \ created: {0}
out.extracted=\
        extracted: {0}
out.inflated=\
        \ inflated: {0}
out.size=\
        (in = {0}) (out= {1})

usage.compat=\
\Compatibility Interface:\
\n\
Usage: jar {ctxui}[vfmn0PMe] [jar-file] [manifest-file] [entry-point] [-C dir] files] ...\n\
Options:\n\
\ \   -c  create new archive\n\
\ \   -t  list table of contents for archive\n\
\ \   -x  extract named (or all) files from archive\n\
\ \   -u  update existing archive\n\
\ \   -v  generate verbose output on standard output\n\
\ \   -f  specify archive file name\n\
\ \   -m  include manifest information from specified manifest file\n\
\ \   -n  perform Pack200 normalization after creating a new archive\n\
\ \   -e  specify application entry point for stand-alone application \n\
\ \       bundled into an executable jar file\n\
\ \   -0  store only; use no ZIP compression\n\
\ \   -P  preserve leading '/' (absolute path) and ".." (parent directory) components from file names\n\
\ \   -M  do not create a manifest file for the entries\n\
\ \   -i  generate index information for the specified jar files\n\
\ \   -C  change to the specified directory and include the following file\n\
If any file is a directory then it is processed recursively.\n\
The manifest file name, the archive file name and the entry point name are\n\
specified in the same order as the 'm', 'f' and 'e' flags.\n\n\
Example 1: to archive two class files into an archive called classes.jar: \n\
\ \      jar cvf classes.jar Foo.class Bar.class \n\
Example 2: use an existing manifest file 'mymanifest' and archive all the\n\
\ \          files in the foo/ directory into 'classes.jar': \n\
\ \      jar cvfm classes.jar mymanifest -C foo/ .\n

main.usage.summary=\
Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...
main.usage.summary.try=\
Try `jar --help' for more information.

main.help.preopt=\
Usage: jar [OPTION...] [ [--release VERSION] [-C dir] files] ...\n\
jar creates an archive for classes and resources, and can manipulate or\n\
restore individual classes or resources from an archive.\n\
\n\
\ Examples:\n\
\ # Create an archive called classes.jar with two class files:\n\
\ jar --create --file classes.jar Foo.class Bar.class\n\
\ # Create an archive using an existing manifest, with all the files in foo/:\n\
\ jar --create --file classes.jar --manifest mymanifest -C foo/ .\n\
\ # Create a modular jar archive, where the module descriptor is located in\n\
\ # classes/module-info.class:\n\
\ jar --create --file foo.jar --main-class com.foo.Main --module-version 1.0\n\
\     -C foo/ classes resources\n\
\ # Update an existing non-modular jar to a modular jar:\n\
\ jar --update --file foo.jar --main-class com.foo.Main --module-version 1.0\n\
\     -C foo/ module-info.class\n\
\ # Create a multi-release jar, placing some files in the META-INF/versions/9 directory:\n\
\ jar --create --file mr.jar -C foo classes --release 9 -C foo9 classes\n\
\n\
To shorten or simplify the jar command, you can specify arguments in a separate\n\
text file and pass it to the jar command with the at sign (@) as a prefix.\n\
\n\
\ Examples:\n\
\ # Read additional options and list of class files from the file classes.list\n\
\ jar --create --file my.jar @classes.list\
\n
main.help.opt.main=\
\ Main operation mode:\n
main.help.opt.main.create=\
\  -c, --create               Create the archive
main.help.opt.main.generate-index=\
\  -i, --generate-index=FILE  Generate index information for the specified jar\n\
\                             archives
main.help.opt.main.list=\
\  -t, --list                 List the table of contents for the archive
main.help.opt.main.update=\
\  -u, --update               Update an existing jar archive
main.help.opt.main.extract=\
\  -x, --extract              Extract named (or all) files from the archive
main.help.opt.main.print-module-descriptor=\
\  -d, --print-module-descriptor  Print the module descriptor
main.help.opt.any=\
\ Operation modifiers valid in any mode:\n\
\n\
\  -C DIR                     Change to the specified directory and include the\n\
\                             following file
main.help.opt.any.file=\
\  -f, --file=FILE            The archive file name. When omitted, either stdin or\n\
\                             stdout is used based on the operation\n\
\      --release VERSION      Places all following files in a versioned directory\n\
\                             of the jar (i.e. META-INF/versions/VERSION/)
main.help.opt.any.verbose=\
\  -v, --verbose              Generate verbose output on standard output
main.help.opt.create.update=\
\ Operation modifiers valid only in create and update mode:\n
main.help.opt.create.update.main-class=\
\  -e, --main-class=CLASSNAME The application entry point for stand-alone\n\
\                             applications bundled into a modular, or executable,\n\
\                             jar archive
main.help.opt.create.update.manifest=\
\  -m, --manifest=FILE        Include the manifest information from the given\n\
\                             manifest file
main.help.opt.create.update.no-manifest=\
\  -M, --no-manifest          Do not create a manifest file for the entries
main.help.opt.create.update.module-version=\
\      --module-version=VERSION    The module version, when creating a modular\n\
\                             jar, or updating a non-modular jar
main.help.opt.create.update.hash-modules=\
\      --hash-modules=PATTERN Compute and record the hashes of modules \n\
\                             matched by the given pattern and that depend upon\n\
\                             directly or indirectly on a modular jar being\n\
\                             created or a non-modular jar being updated
main.help.opt.create.update.module-path=\
\  -p, --module-path          Location of module dependence for generating\n\
\                             the hash
main.help.opt.create.update.do-not-resolve-by-default=\
\      --do-not-resolve-by-default  Exclude from the default root set of modules
main.help.opt.create.update.warn-if-resolved=\
\      --warn-if-resolved     Hint for a tool to issue a warning if the module\n\
\                             is resolved. One of deprecated, deprecated-for-removal,\n\
\                             or incubating
main.help.opt.create.update.index=\
\ Operation modifiers valid only in create, update, and generate-index mode:\n
main.help.opt.create.update.index.no-compress=\
\  -0, --no-compress          Store only; use no ZIP compression
main.help.opt.other=\
\ Other options:\n
main.help.opt.other.help=\
\  -h, --help[:compat]        Give this, or optionally the compatibility, help
main.help.opt.other.help-extra=\
\      --help-extra           Give help on extra options
main.help.opt.other.version=\
\      --version              Print program version
main.help.postopt=\
\ An archive is a modular jar if a module descriptor, 'module-info.class', is\n\
\ located in the root of the given directories, or the root of the jar archive\n\
\ itself. The following operations are only valid when creating a modular jar,\n\
\ or updating an existing non-modular jar: '--module-version',\n\
\ '--hash-modules', and '--module-path'.\n\
\n\
\ Mandatory or optional arguments to long options are also mandatory or optional\n\
\ for any corresponding short options.
