java程序运行目录改变_java – 有没有办法修改模块路径并添加程序化JShell实例的模块?...

我试图通过我使用JShell API创建的JShell实例在运行时运行一些Java代码.为了演示我的问题,我将分享我的简单代码.

在我目前的设置中,我有一个名为lib的目录,它有MysqL Java驱动程序:MysqL-connector-java-5.1.35.jar.

通过命令工具启动JShell并添加所需的模块:

jshell --module-path lib --add-modules MysqL.connector.java

然后加载MysqL驱动程序适合我:

jshell> Class.forName("com.MysqL.jdbc.Driver").newInstance();

$1 ==> com.MysqL.jdbc.Driver@42f93a98

我用module-info.java创建了一个类似的Java 9模块:

module example.loadMysqL {

requires java.sql;

requires MysqL.connector.java;

requires jdk.jshell;

}

src / example / loadMysqL / Runner.java:

package example.loadMysqL;

import jdk.jshell.*;

import java.sql.*;

public class Runner {

public static void main(String[] args) throws Exception {

// this works because this module requires MysqL.connector.java

System.out.println(Class.forName("com.MysqL.jdbc.Driver").newInstance());

JShell js = JShell.create();

String code = ""

+ "try {"

+ " Class.forName(\"com.MysqL.jdbc.Driver\").newInstance();"

+ "} catch (Exception e) {"

+ " System.out.println(e.toString());"

+ "}";

js.eval(code);

}

}

建筑/包装后:

java -p lib -m example.loadMysqL

com.MysqL.jdbc.Driver@6a4f787b

java.lang.ClassNotFoundException: com.MysqL.jdbc.Driver

很明显,即使example.loadMysqL模块需要MysqL连接器,创建的JShell实例也不需要.所以找不到班级.

关于如何以编程方式将模块添加到JShell实例的任何想法,所以它的工作方式类似于直接的JShell编码示例?

更新 – 我已经弄清楚如何设置模块路径:

String modulePath = System.getProperty("jdk.module.path");

js.eval("System.setProperty(\"jdk.module.path\",\""

+ modulePath + "\");");

但这还不够.我还是以某种方式添加了所需的模块.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值