Skip to content

Commit 23efd42

Browse files
committed
Restore README (fix accidental empty-content overwrite) + add CI badge
1 parent 3a2fcd6 commit 23efd42

1 file changed

Lines changed: 84 additions & 0 deletions

File tree

‎README.md‎

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
# java-cli-arg-parser
2+
3+
[![CI](https://github.com/kasapdev/java-cli-arg-parser/actions/workflows/ci.yml/badge.svg)](https://github.com/kasapdev/java-cli-arg-parser/actions/workflows/ci.yml)
4+
5+
A lightweight, zero-dependency command-line argument parser for Java. Supports boolean
6+
flags, value-taking options (`--opt=value` or `--opt value`), short aliases (`-v` for
7+
`--verbose`), positional arguments, an `--` end-of-options marker, and generated `--help`
8+
text. Pure Java 17, no external libraries, no build tool required.
9+
10+
## Build & Run
11+
12+
```bash
13+
JAVAC="/path/to/jdk/bin/javac"
14+
JAVA="/path/to/jdk/bin/java"
15+
16+
# Compile the library
17+
"$JAVAC" -d out $(find src/main/java -name "*.java")
18+
19+
# Compile the tests against the compiled library
20+
"$JAVAC" -cp out -d out $(find src/test/java -name "*.java")
21+
22+
# Run the tests
23+
"$JAVA" -cp out dev.kasapdev.argparser.ArgParserTest
24+
```
25+
26+
On Windows, replace `$(find ... -name "*.java")` with an explicit file list, or run the
27+
`find` substitution from Git Bash / WSL.
28+
29+
## Usage
30+
31+
```java
32+
import dev.kasapdev.argparser.ArgParser;
33+
import dev.kasapdev.argparser.ParsedArgs;
34+
import dev.kasapdev.argparser.ArgParseException;
35+
36+
public class Example {
37+
public static void main(String[] args) {
38+
ArgParser parser = new ArgParser()
39+
.addFlag("verbose", "v", "Enable verbose output")
40+
.addOption("output", "o", "Output file path", "out.txt")
41+
.addOption("format", "Output format (json|csv)", "json");
42+
43+
try {
44+
ParsedArgs parsed = parser.parse(args);
45+
46+
if (parsed.flag("verbose")) {
47+
System.out.println("Verbose mode on");
48+
}
49+
System.out.println("Output file: " + parsed.option("output"));
50+
System.out.println("Format: " + parsed.option("format"));
51+
System.out.println("Positional args: " + parsed.positionals());
52+
} catch (ArgParseException e) {
53+
System.err.println("Error: " + e.getMessage());
54+
System.err.println(parser.helpText());
55+
}
56+
}
57+
}
58+
```
59+
60+
Running with `input.csv --verbose -o result.json` yields `verbose=true`,
61+
`output=result.json`, `format=json` (default), and `positionals=["input.csv"]`.
62+
63+
## API
64+
65+
### `ArgParser`
66+
67+
- `ArgParser addFlag(String name, String description)` / `addFlag(String name, String shortAlias, String description)`
68+
— registers a boolean flag.
69+
- `ArgParser addOption(String name, String description, String defaultValue)` / `addOption(String name, String shortAlias, String description, String defaultValue)`
70+
— registers a value-taking option with a default.
71+
- `ParsedArgs parse(String[] args)` — parses the given arguments; throws `ArgParseException`
72+
naming the offending token on an unrecognized `--flag`/`-f` or a missing option value.
73+
- `String helpText()` — generated help listing every registered option, its alias, and
74+
default value.
75+
76+
### `ParsedArgs`
77+
78+
- `boolean flag(String name)` — whether the flag was present.
79+
- `String option(String name)` — the supplied value, or the registered default.
80+
- `List<String> positionals()` — positional arguments, in order.
81+
82+
## License
83+
84+
MIT — see [LICENSE](LICENSE).

0 commit comments

Comments
 (0)