无法从命令行运行 Java 应用程序,同时在 Linux 上提供多个目录作为类路径(带有路径分隔符)



我只是将我的java项目导出到可执行jar。我以某种方式使我的项目工作从DB(休眠.cfg.xml),config.properties和log4j.properties访问值,并可编辑以备将来使用。

我想把hibernate.cf.xml,config.properties和log4j.properties放在jar的外面,并将它们放在其他目录中的某个地方。

我一直在寻找这个并得到这种方式:

  1. 在我的部署系统中的某个位置创建了一个/path/to/mydir 目录。
  2. 将 log4j.properties 和 META-INF 和 hibernate.properties 和 hibernate.cfg.xml 移动到 mydir。
  3. 并使用此命令

    这只是一个例子: java -cp Myjar.jar:/path/to/mydir MyMainClass

    我写的命令是这样的: java -cp coreservice.jar:/mon/properties CoreServiceController.java

我已经尝试过这样,但我得到了这个错误

Error: Could not find or load main class

任何人都可以帮我修复它或给出更好的方法将是快乐~

===================(

编辑)==

=================================================================

哦,我的上帝~我从我的罐子中删除(剪切)文件夹 META-INF 并粘贴到我的配置文件夹(/mon/properties)

并再次尝试此命令java -cp coreservice.jar;mon/properties/ id.co.bn i.coreservice.controller.CoreServiceController.....Annnnndddddd 这项工作;))

tha-nks 代表 Apostolos, Antoniossss, Yasa,没有名字:)

你不应该使用

java -cp coreservice.jar:/mon/properties CoreServiceController.java

您应该将类文件放在那里并重试,而不是源 Java 文件

如果这是在包中,比如说com.test,那么在com/test的父目录中,你键入

java -cp coreservice.jar:. com.test.CoreServiceController .

这应该有效

(编辑)要从特定位置加载休眠.cfg.xml文件,请在 HibernateUtil 类中尝试此方法:

public static void setConnectionProperties() {
    URL configFileURL = null;
    try {
        configFileURL = URL_OF_YOUR_CFG_XML_FILE;
        configuration = (new Configuration()).configure(configFileURL);
        sessionFactory = configuration.buildSessionFactory();
    } catch (HibernateException e) {
        e.printStackTrace(); 
        System.out.println("Error while initializing hibernate: " + e.getMessage());
    }
}

如果我正确理解你的问题:

当你配置会话工厂时,你可以这样写

new Configuration()
            .configure("/path/to/your/files/hibernate.cfg.xml")
            .buildSessionFactory();

完整示例

因此,

由于您仍然遇到相同的问题,因此我必须说您正在做一些非常非常错误的事情,因为这是java运行时的基础。原则:

  1. 当然,您必须提供完全限定的类名才能运行Java,而不是源文件(*.java),因此您的调用必须proper.package.CoreServiceController
  2. CoreServiceController不能在默认页面中(未指定包名称) - 如果是,请创建一些包仅用于测试,例如。 service.core,把CoreServiceController放在那里。至于第 1 点 - 您的电话将java -cp coreservice.jar:/mon/properties service.core.CoreServiceController仅此而已,仅此而已。
  3. 如果你为类路径提供了错误的条目,Java会有令人讨厌的行为 - 它没有说例如文件myUberProgram.jar不存在等。它只会忽略这样的条目并继续。我在带有 CP 的 Linux 上遇到了类似的问题 - 拼写错误的 jar 文件和"这到底是怎么回事?!为什么它不运行" - 与您遇到的问题相同 - no class found
  4. 检查 101% 确定,如果您的 jar 文件中有CoreServiceController.class文件 - 也许包装有问题,并且 jar 中没有这样的文件。
  5. 最后,如果满足所有先前的限制并且没有任何效果,那么您的最后机会是导航到将工作目录更改为 jar 文件所在的目录(只需从命令行转到那里)并尝试在没有提供外部 cp 的情况下运行应用程序。从 jar 所在的目录:
    1. 呼叫java -cp Myjar.jar proper.package.CoreServiceController - 应该有效,但下一个是 100% 检查的
    2. 调用java -cp ./Myjar.jar proper.package.CoreServiceController - 我在远程 Linux 服务器上的所有应用程序都是从 bash 脚本中获取的,就像这样,它总是有效。

如果这些都没有帮助你,那么我必须说把你的马辛扔进海里,因为它被诅咒了,或者什么xD——我只想说,我没有其他想法来帮助你。

为了练习构建简单的 HelloWorld jar 并尝试从命令行(但不是可运行的 jar,因此您必须提供类路径)。也许这样你会看到你做错了什么。我今天的想法已经完成,先生,美好的一天!

PS. @splatter_fadli 我允许自己编辑您的问题,因为现在它是错误的指导 - 您对 H 配置没有问题,只有在类路径中提供了多个条目时运行应用程序。也许它会被接受。- 啊,它完成了。

最后一站编辑:根据这个问题 - QA 将类路径条目放入逗号中。试试吧。如果Class not found会消失,那么我们已经走了一半。 -cp "coreservice.jar:/mon/properties"

最新更新