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


.Code generation arguments:
[grid="all"]
`------------------------`-----------------------------------------------
Argument                 Description
-------------------------------------------------------------------------
+\--bindir <dir>+        Output directory for compiled objects
+\--class-name <name>+   Sets the generated class name. This overrides\
                         +\--package-name+. When combined with \
                         +\--jar-file+, sets the input class.
+\--jar-file <file>+     Disable code generation; use specified jar
+\--outdir <dir>+        Output directory for generated code
+\--package-name <name>+ Put auto-generated classes in this package
+\--map-column-java <m>+ Override default mapping from SQL type to\
                         Java type for configured columns.
-------------------------------------------------------------------------

