0

我只是将我的 java 项目导出到可执行 jar。我以某种方式使我的项目能够访问来自 DB (hibernate.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

任何人都可以帮助我修复它或提供更好的方法将是乐趣〜

=====================(编辑)=========================== =========================

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

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

感谢 Apostolos、Antoniosss、Yasa 和无名 :)

4

3 回答 3

0

你不应该使用

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

你应该把类文件放在那里再试一次,而不是源java文件

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

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

这应该工作

(编辑)要从特定位置加载 hibernate.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());
    }

}
于 2013-10-21T10:22:18.567 回答
0

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

当你配置 sessionFactory 你可以这样写

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

完整的例子

于 2013-10-21T11:20:32.870 回答
0

所以你仍然有同样的问题,我必须说你做的非常非常错误,因为这是 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% 确定,如果CoreServiceController.class您的 jar 文件中有文件 - 可能包装有问题,并且 jar 中没有这样的文件。
  5. 最后,如果满足所有先前的限制并且没有任何效果,那么您的最后机会是导航以将工作目录更改为 jar 文件所在的目录(只需从命令行转到那里)并尝试在没有提供外部 cp 的情况下运行应用程序。从 jar 所在的目录:
    1. 通话java -cp Myjar.jar proper.package.CoreServiceController- 应该工作,但下一个是 100% 检查
    2. 调用java -cp ./Myjar.jar proper.package.CoreServiceController- 我在远程 Linux 服务器上的所有应用程序都是从 bash 脚本中获取的,就像这样,它总是有效的。

如果这些都没有帮助你,那么我必须说把你的 mashine 扔到海里,因为它被诅咒了或者什么 xD - 我只想说,我没有其他想法可以帮助你。

为了您的练习,构建简单的 HelloWorld jar 并尝试从命令行使用它(但不是可运行的 jar,因此您必须提供类路径)。也许这样你会发现你做错了什么。今天的思路就到这里了,老师好!

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

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

于 2013-10-22T06:23:05.023 回答