137 lines
3.4 KiB
Bash
Executable File
137 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
# vx.jnew - Create a java project
|
|
#
|
|
# FEATURES:
|
|
# - Generate single-file project
|
|
#
|
|
# COMPILATION (Linux - POSIX):
|
|
# ./jnew
|
|
#
|
|
#
|
|
# LICENSE: BSD-3-Clause
|
|
#
|
|
# Copyright (c) 2025 VX
|
|
#
|
|
# Redistribution and use in source and binary forms, with or without
|
|
# modification, are permitted provided that the following conditions are met:
|
|
#
|
|
# 1. Redistributions of source code must retain the above copyright notice, this
|
|
# list of conditions and the following disclaimer.
|
|
#
|
|
# 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
# this list of conditions and the following disclaimer in the documentation
|
|
# and/or other materials provided with the distribution.
|
|
#
|
|
# 3. Neither the name of the copyright holder nor the names of its
|
|
# contributors may be used to endorse or promote products derived from
|
|
# this software without specific prior written permission.
|
|
#
|
|
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
#
|
|
|
|
me=$0
|
|
scriptversion="1.0.0"
|
|
|
|
version="$me $scriptversion
|
|
|
|
Copyright (C) 2025 VX.
|
|
|
|
This is free software; you are free to change and redistribute it.
|
|
There is NO WARRANTY, to the extent permitted by law."
|
|
|
|
usage="\
|
|
Usage: $me [project] [OPTION]...
|
|
Generate a java project
|
|
|
|
Options:
|
|
--class generate a class only file
|
|
|
|
--help print this help and exit
|
|
--version output version information"
|
|
|
|
classonly=false
|
|
classname=
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case $1 in
|
|
--help)
|
|
echo "$usage"
|
|
exit 0
|
|
;;
|
|
--version)
|
|
echo "$version"
|
|
exit 0
|
|
;;
|
|
--class)
|
|
classonly=true
|
|
;;
|
|
-*)
|
|
echo "$me: unknown option '$1'" >&2
|
|
echo "Try '$me --help' for more information." >&2
|
|
exit 1
|
|
;;
|
|
*)
|
|
classname=$1
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ -z "$classname" ]; then
|
|
echo "$me: missing project name" >&2
|
|
echo "Try '$me --help' for more information." >&2
|
|
exit 1
|
|
fi
|
|
|
|
firstchar=$(printf '%s' "$classname" | cut -c1 | tr '[:lower:]' '[:upper:]')
|
|
restchars=$(printf '%s' "$classname" | cut -c2-)
|
|
classname="${firstchar}${restchars}"
|
|
|
|
file="${classname}.java"
|
|
|
|
if [ -e "$file" ]; then
|
|
echo "$me: file '$file' already exists" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cat <<EOF >"$file"
|
|
/*
|
|
* Short description
|
|
*
|
|
* Author: Owen Westness <vx-clutch>
|
|
* Date: $(date +"%B %d, %Y")
|
|
* License: MIT
|
|
*/
|
|
|
|
public class $classname {
|
|
EOF
|
|
|
|
if $classonly; then
|
|
cat <<EOF >>"$file"
|
|
public $classname() {
|
|
// Your code here...
|
|
}
|
|
EOF
|
|
else
|
|
cat <<EOF >>"$file"
|
|
public static void main(String[] args) {
|
|
// Your code here...
|
|
}
|
|
EOF
|
|
fi
|
|
|
|
printf '}\n' >>"$file"
|
|
|
|
echo "Created $file"
|
|
|
|
# End: jnew
|