 ------
 jpms.args
 ------
 Robert Scholte
 ------
 2017-08-22
 ------

~~ 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.

~~ NOTE: For help with the syntax of this file, see:
~~ http://maven.apache.org/doxia/references/apt-format.html

JPMS.ARGS

  Java 9 comes with a new set of arguments related to the Java Platform Modular System. Besides the module path are
  other new arguments which can change the behavior of the application. These can be used during both compile time
  and runtime. This information is not stored in any class, but it can be interesting to know at runtime which extra
  arguments were used at compile time.
  
  If any of these arguments is used, the <<<META-INF/jpms.args>>> is created.
  Every argument gets its own line.
  The following arguments will end up in this file:
  
  * <<<--upgrade-module-path>>>
  
  * <<<--add-exports>>>
  
  * <<<--add-reads>>>
  
  * <<<--add-modules>>>
  
  * <<<--limit-modules>>>
  
  * <<<--patch-module>>>
  
  []
  
  The <<<--patch-module>>> values are different compared to the original values passed to the compiler. According to
  the specification it looks like <<<--patch-module \<module\>=\<file\>(\<pathsep\>\<file\>)\*>>>
  However, files are system specific. For that reason the module names are used. If the jar itself contains the 
  patchcode, then an <<<_>>> (underscore) is used. As separators a <<<, >>> (comma + space) is used.
  
+---  
  --patch-module
  <module>=<module>(, <module>)*
+---  