【问题标题】:How can I properly export a java project as runnable jar?如何正确地将 java 项目导出为可运行的 jar?
【发布时间】:2015-10-11 23:50:44
【问题描述】:

我正在尝试在 java 中学习 RMI API。一切似乎终于奏效了;我的服务器已启动并正在运行,我的客户端可以连接。 但是,当我从 Eclipse 中将项目导出为可运行的 jar 时,客户端作为启动配置,现在这个 jar 无法连接到我正在运行的服务器。我收到了AccessControlException

    if (System.getSecurityManager() == null) {
        System.setProperty("java.security.policy", "src/mySecurity");
        System.setSecurityManager(new SecurityManager());
    }

客户端和服务器都将这些作为其主要方法的第一行。所以我认为在我将项目导出为 jar 后他们找不到“mySecurity”文件?我能做什么?

编辑:当我在我的项目中访问 .png 文件时,我会这样做MyClass.class.getResource("/resources/myImage.png") 导出为 jar 时效果很好。但据我了解,只有 .java 文件应该放在我项目的 src 文件夹中?但是 src 文件夹之外的任何内容都不包含在 jar 文件中。 (注意 myImage.png 位于 src 中)。

所以目前我导出 jar 并将其放在一个文件夹中,其中包含一个资源文件夹(我从我的 IDE 工作区复制)。这是我应该这样做的方式吗,或者我实际上可以将我的项目导出为可执行 jar,并且访问资源与 src 处于同一级别?

【问题讨论】:

  • 愚蠢的标题,修复它。

标签: java eclipse jar export rmi


【解决方案1】:

运行你的JVM
-Djava.security.debug=access,failure,policy

policy 部分准确显示正在加载的策略文件。其余部分有助于调试所有AccessControlExceptions 及其原因,并显示每个有效的保护域,以及每种情况下的关联策略文件。

【讨论】:

  • 这会产生很多我不知道如何阅读的胡言乱语。不过,我希望在这里找到什么?显然问题在于导出我的项目。
  • 它告诉你JVM是否找到了你的策略文件,这是你真正需要知道的。如果有,则说明您已正确导出项目,而您的问题出在其他地方。
  • 它没有,我知道这是事实。如果我将 mySecurity 放在与 jar 相同级别的 src 文件夹中,它会起作用。经过长时间的处理,我现在才清楚我的问题到底是什么,我觉得编辑很清楚。那里似乎有很多重复的答案,但我仍然不喜欢:/
  • System.setProperty("java.security.policy", "src/mySecurity"); 它正在用户目录中寻找该文件。但它不应该,因为只有 .jar 应该在 user.dir 中!我可以不更改字符串以查看“罐子内部”吗?
  • src 目录在部署时不存在。仅在您的 IDE 中。不要把东西放在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2016-12-24
  • 2021-10-17
  • 2015-01-16
相关资源
最近更新 更多