【问题标题】:To search and get the jar from a path to execute从要执行的路径中搜索并获取 jar
【发布时间】:2016-01-19 05:16:28
【问题描述】:

我们正在开发 Java Maven 项目。我们正在处理数据库以获取他们的模式。其中之一是 Sybase 数据库,因此我们使用 DDLGen 命令行实用程序生成它的 ddl。为了使用 ddlgen,我在代码中导入了这三个 jar,并将它们添加到运行 jar 中的类路径中:

  • 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
        } 

当在其各自文件夹的路径中找到 jars(硬编码)时,此代码工作正常: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 和构建运行时,这不是每次更改路径的正确解决方案。

我只是想要一个解决方案,无论是从IDE还是构建,都应该将这些jar文件搜索到项目路径中,然后在-cp命令中将上面给出的jar添加到类路径中,然后它应该执行ddlgen .

那么有什么办法可以达到我的要求吗?

【问题讨论】:

  • 你试过 exec-maven-plugin 吗?

标签: java maven jar sap-ase


【解决方案1】:

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

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

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

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

【讨论】:

  • 将 jconn4.jar 之类的 jar 重命名为 jconn4-4.0.jar 会影响 ddlegen 命令吗?
  • 谢谢!但它不会使用上述建议生成 ddl。
  • 我不知道 ddlgen 命令,但重命名它通常不会影响行为。直接调用方法为什么不生成ddl?
猜你喜欢
  • 1970-01-01
  • 2017-07-24
  • 1970-01-01
  • 2015-07-28
  • 1970-01-01
  • 2011-04-26
  • 1970-01-01
  • 2018-11-11
  • 2014-01-30
相关资源
最近更新 更多