我只是将我的java项目导出到可执行jar。我以某种方式使我的项目工作从DB(休眠.cfg.xml),config.properties和log4j.properties访问值,并可编辑以备将来使用。
我想把hibernate.cf.xml,config.properties和log4j.properties放在jar的外面,并将它们放在其他目录中的某个地方。
我一直在寻找这个并得到这种方式:
- 在我的部署系统中的某个位置创建了一个/path/to/mydir 目录。
- 将 log4j.properties 和 META-INF 和 hibernate.properties 和 hibernate.cfg.xml 移动到 mydir。
-
并使用此命令
这只是一个例子:
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运行时的基础。原则:
- 当然,您必须提供完全限定的类名才能运行Java,而不是源文件(*.java),因此您的调用必须
proper.package.CoreServiceController
-
CoreServiceController
不能在默认页面中(未指定包名称) - 如果是,请创建一些包仅用于测试,例如。service.core
,把CoreServiceController
放在那里。至于第 1 点 - 您的电话将java -cp coreservice.jar:/mon/properties service.core.CoreServiceController
仅此而已,仅此而已。 - 如果你为类路径提供了错误的条目,Java会有令人讨厌的行为 - 它没有说例如文件myUberProgram.jar不存在等。它只会忽略这样的条目并继续。我在带有 CP 的 Linux 上遇到了类似的问题 - 拼写错误的 jar 文件和"这到底是怎么回事?!为什么它不运行" - 与您遇到的问题相同 -
no class found
- 检查 101% 确定,如果您的 jar 文件中有
CoreServiceController.class
文件 - 也许包装有问题,并且 jar 中没有这样的文件。 - 最后,如果满足所有先前的限制并且没有任何效果,那么您的最后机会是导航到将工作目录更改为 jar 文件所在的目录(只需从命令行转到那里)并尝试在没有提供外部 cp 的情况下运行应用程序。从 jar 所在的目录:
- 呼叫
java -cp Myjar.jar proper.package.CoreServiceController
- 应该有效,但下一个是 100% 检查的 - 调用
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"