我们正在开发Java Maven项目。我们正在处理数据库以获取其架构。其中一个是Sybase数据库,因此我们使用DDLGen命令行实用程序生成其ddl。要使用ddlgen,我已经在我的代码中导入了这三个jar并将它们添加到运行jar中的class-path中:
之后,我们使用以下代码生成DDL:
String command = "java -cp \"myPath\\lib\\com\\jconn4\\4.0\\jconn4-4.0.jar;myPath\\lib\\com\\dsparser\\4.0\\dsparser-4.0.jar;myPath\\lib\\com\\DDLGen\\4.0\\DDLGen-4.0.jar\" com.sybase.ddlgen.DDLGenerator -UuserName -Ppassword -SconnectionString -DdatabaseName -OoutputFile";
try {
Runtime run = Runtime.getRuntime();
Process pr = run.exec(command);
pr.waitFor();
} catch (Exception e) {
//errors
}
当在各自文件夹中的路径中找到jar时,此代码正常工作(硬编码): myPath \ lib \ com
在构建项目时,这个结构将被更改,就像项目中使用的所有jar将被放入路径 .... myProject / repo / alljars
然后ddlgen必须改为:
String command = "java -cp \"repo\\jconn4-4.0.jar;repo\\dsparser-4.0.jar;repo\\DDLGen-4.0.jar\"
但是,当使用IDE和build进行代码运行时,这不是每次更改路径的正确解决方案。
我只想要一个解决方案,无论是从IDE还是构建,都应该将这些jar文件搜索到项目路径中,然后在 -cp 命令中将上面给出的jar添加到类路径中,然后执行ddlgen
有没有办法达到我的要求?
答案 0 :(得分:1)
似乎在运行程序时,jconn4-4.0.jar
等已经在类路径中了。
在这种情况下,您不需要启动jvm的另一个副本,而只需执行该类的Main
方法,如下所示:
com.sybase.ddlgen.DDLGenerator.Main(
"-UuserName", "-Ppassword", "-SconnectionString", "-DdatabaseName" "-OoutputFile")
作为奖励,您还可以捕获任何抛出的异常,而不必解析其他jvm的输出。