src/share/classes/org/openjdk/jigsaw/cli/Librarian.java
Print this page
*** 45,62 ****
--- 45,91 ----
public class Librarian {
private static JigsawModuleSystem jms
= JigsawModuleSystem.instance();
+ private static final File homeLibrary
+ = new File(System.getProperty("java.home"), "lib/modules");
+
static class Create extends Command<SimpleLibrary> {
protected void go(SimpleLibrary lib)
throws Command.Exception
{
+ //assert lib == null;
noDry();
+ File lp = libPath(opts);
+ File pp = null;
+ if (opts.has(parentPath)) {
+ pp = opts.valueOf(parentPath);
+ } else if (!opts.has("N")) {
+ pp = homeLibrary;
+ }
+ File natlibs = null;
+ if (opts.has(nativeLibs)) {
+ natlibs = opts.valueOf(nativeLibs);
+ }
+ File natcmds = null;
+ if (opts.has(nativeCmds)) {
+ natcmds = opts.valueOf(nativeCmds);
+ }
finishArgs();
+
+ Set<StorageOption> createOpts = new HashSet<>();
+ if (opts.has("z"))
+ createOpts.add(StorageOption.DEFLATED);
+
+ try {
+ lib = SimpleLibrary.create(lp, pp, natlibs, natcmds, createOpts);
+ } catch (IOException x) {
+ throw new Command.Exception(x);
}
}
+ }
static class DumpClass extends Command<SimpleLibrary> {
protected void go(SimpleLibrary lib)
throws Command.Exception
{
*** 471,487 ****
}
private OptionParser parser;
private static OptionSpec<Integer> repoIndex; // ##
private void usage() {
out.format("%n");
out.format("usage: jmod add-repo [-i <index>] URL%n");
out.format(" jmod extract <module-file> ...%n");
out.format(" jmod config [<module-id> ...]%n");
! out.format(" jmod create [-L <library>] [-P <parent>]%n");
out.format(" jmod del-repo URL%n");
out.format(" jmod dump-class <module-id> <class-name> <output-file>%n");
out.format(" jmod dump-config <module-id>%n");
out.format(" jmod identify%n");
out.format(" jmod install [--noverify] [-n] <module-id-query> ...%n");
--- 500,520 ----
}
private OptionParser parser;
private static OptionSpec<Integer> repoIndex; // ##
+ private static OptionSpec<File> libPath;
+ private static OptionSpec<File> parentPath;
+ private static OptionSpec<File> nativeLibs;
+ private static OptionSpec<File> nativeCmds;
private void usage() {
out.format("%n");
out.format("usage: jmod add-repo [-i <index>] URL%n");
out.format(" jmod extract <module-file> ...%n");
out.format(" jmod config [<module-id> ...]%n");
! out.format(" jmod create [-L <library>] [-P <parent>] [--natlibs <natlibs>] [--natcmds <natcmds>]%n");
out.format(" jmod del-repo URL%n");
out.format(" jmod dump-class <module-id> <class-name> <output-file>%n");
out.format(" jmod dump-config <module-id>%n");
out.format(" jmod identify%n");
out.format(" jmod install [--noverify] [-n] <module-id-query> ...%n");
*** 508,530 ****
private void exec(String[] args) throws OptionException, Command.Exception {
parser = new OptionParser();
// ## Need subcommand-specific option parsing
! OptionSpec<File> libPath
= (parser.acceptsAll(Arrays.asList("L", "library"),
"Module-library location"
+ " (default $JAVA_MODULES)")
.withRequiredArg()
.describedAs("path")
.ofType(File.class));
! OptionSpec<File> parentPath
= (parser.acceptsAll(Arrays.asList("P", "parent-path"),
"Parent module-library location")
.withRequiredArg()
.describedAs("path")
.ofType(File.class));
parser.acceptsAll(Arrays.asList("N", "no-parent"),
"Use no parent library when creating");
parser.acceptsAll(Arrays.asList("v", "verbose"),
"Enable verbose output");
parser.acceptsAll(Arrays.asList("h", "?", "help"),
--- 541,574 ----
private void exec(String[] args) throws OptionException, Command.Exception {
parser = new OptionParser();
// ## Need subcommand-specific option parsing
! libPath
= (parser.acceptsAll(Arrays.asList("L", "library"),
"Module-library location"
+ " (default $JAVA_MODULES)")
.withRequiredArg()
.describedAs("path")
.ofType(File.class));
! parentPath
= (parser.acceptsAll(Arrays.asList("P", "parent-path"),
"Parent module-library location")
.withRequiredArg()
.describedAs("path")
.ofType(File.class));
+ nativeLibs
+ = (parser.accepts("natlibs", "Directory to store native libs")
+ .withRequiredArg()
+ .describedAs("dir")
+ .ofType(File.class));
+
+ nativeCmds
+ = (parser.accepts("natcmds", "Directory to store native launchers")
+ .withRequiredArg()
+ .describedAs("dir")
+ .ofType(File.class));
parser.acceptsAll(Arrays.asList("N", "no-parent"),
"Use no parent library when creating");
parser.acceptsAll(Arrays.asList("v", "verbose"),
"Enable verbose output");
parser.acceptsAll(Arrays.asList("h", "?", "help"),
*** 552,564 ****
"Strip debug attributes during installation");
if (args.length == 0)
usage();
- File homeLibrary = new File(System.getProperty("java.home"),
- "lib/modules");
-
OptionSet opts = parser.parse(args);
if (opts.has("h"))
usage();
List<String> words = opts.nonOptionArguments();
if (words.isEmpty())
--- 596,605 ----
*** 565,600 ****
usage();
String verb = words.get(0);
Class<? extends Command<SimpleLibrary>> cmd = commands.get(verb);
if (cmd == null)
throw new Command.Exception("%s: unknown command", verb);
! File lp = null;
! if (opts.has(libPath)) {
! lp = opts.valueOf(libPath);
! } else {
! String jm = System.getenv("JAVA_MODULES");
! if (jm != null)
! lp = new File(jm);
! else
! lp = homeLibrary;
! }
! File pp = null;
! if (opts.has(parentPath)) {
! pp = opts.valueOf(parentPath);
! } else if (!opts.has("N")) {
! pp = homeLibrary;
! }
SimpleLibrary lib = null;
try {
- if (verb.equals("create")) {
- Set<StorageOption> createOpts = new HashSet<>();
- if (opts.has("z"))
- createOpts.add(StorageOption.DEFLATED);
- lib = SimpleLibrary.create(lp, pp, createOpts);
- } else {
lib = SimpleLibrary.open(lp);
- }
} catch (FileNotFoundException x) {
String msg = null;
File f = new File(x.getMessage());
try {
f = f.getCanonicalFile();
--- 606,622 ----
usage();
String verb = words.get(0);
Class<? extends Command<SimpleLibrary>> cmd = commands.get(verb);
if (cmd == null)
throw new Command.Exception("%s: unknown command", verb);
!
! // every command, except create, needs to be passed a reference to the library
SimpleLibrary lib = null;
+ if (!verb.equals("create")) {
+ File lp = libPath(opts);
try {
lib = SimpleLibrary.open(lp);
} catch (FileNotFoundException x) {
String msg = null;
File f = new File(x.getMessage());
try {
f = f.getCanonicalFile();
*** 607,624 ****
--- 629,659 ----
}
throw new Command.Exception("%s: %s", lp, msg);
} catch (IOException x) {
throw new Command.Exception(x);
}
+ }
try {
cmd.newInstance().run(lib, opts);
} catch (InstantiationException x) {
throw new AssertionError(x);
} catch (IllegalAccessException x) {
throw new AssertionError(x);
}
}
+
+ private static File libPath(OptionSet opts) {
+ if (opts.has(libPath)) {
+ return opts.valueOf(libPath);
+ } else {
+ String jm = System.getenv("JAVA_MODULES");
+ if (jm != null)
+ return new File(jm);
+ else
+ return homeLibrary;
+ }
+ }
private Librarian() { }
public static void main(String[] args) {
try {