从路径中搜索并获取jar以执行

时间:2016-01-19 05:16:29

标签: java maven jar sybase-ase

我们正在开发Java Maven项目。我们正在处理数据库以获取其架构。其中一个是Sybase数据库,因此我们使用DDLGen命令行实用程序生成其ddl。要使用ddlgen,我已经在我的代码中导入了这三个jar并将它们添加到运行jar中的class-path中:

  • jconn4.jar
  • DDLGen.jar
  • dsparser.jar

之后,我们使用以下代码生成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

有没有办法达到我的要求?

1 个答案:

答案 0 :(得分:1)

似乎在运行程序时,jconn4-4.0.jar等已经在类路径中了。

在这种情况下,您不需要启动jvm的另一个副本,而只需执行该类的Main方法,如下所示:

com.sybase.ddlgen.DDLGenerator.Main(
    "-UuserName",  "-Ppassword",  "-SconnectionString",  "-DdatabaseName" "-OoutputFile")

作为奖励,您还可以捕获任何抛出的异常,而不必解析其他jvm的输出。