【问题标题】:import another jar's program into my jar将另一个 jar 的程序导入我的 jar
【发布时间】:2018-03-15 20:31:27
【问题描述】:

我是 Java 的超级新手。我有一个 Java 程序,它作为 .jar 文件部署到服务器。我有另一个可执行程序,也是在 Java 中,我需要它来调用(在 myjar.jar 中)。起初我基本上是在炮击并创建另一个 java 实例,例如:

List<String> commandAndParameters = new ArrayList<String>(Arrays.asList("java", "-jar", "myjar.jar"
ProcessBuilder builder = new ProcessBuilder();
builder.command(commandAndParameters);
Process process = builder.start();
...

这运行得不太好,启动第二个 Java 实例也很慢,所以我想我只需将 jar 导入我的程序并直接运行该类。主类称为 Main,当然我要调用的类的方法是 main。这有点奇怪,但我认为它可以工作(没有规则说你不能拥有另一个具有 main 方法的对象,对吧?)

我不太确定如何导入它。我提取了 myjar.jar 来查看结构,我想使用的类位于a/b/c/Main.class。该 jar 存在于我试图从中调用它的程序的根目录中,所以我天真地尝试了 import a.b.c.Main 但当然这不起作用。我正在使用 IntelliJ 并尝试将 .jar 添加为模块(项目结构->模块->+->导入模块),我想将其添加到我的类路径中,但它只是说“无法从 myjar.jar 导入任何东西"

我使用 Maven 是为了物有所值。我需要让 IntelliJ 和 Maven 生成的 jar 在我构建时正常工作。

很明显,我迷路了。我什至不确定我尝试这样做的方式是否理想 - 导入另一个 Jar 似乎很脏,只是为了让我可以在代码中运行第二个主要方法。因此,我将不胜感激有关“正确方式”做事以及如何使这些事情发挥作用的任何指示。

【问题讨论】:

  • 嗯,你应该知道服务器是如何配置的,你需要在服务器上设置类路径(或类似的东西)以包含另一个 Jar 文件。
  • 我控制了用于在服务器上启动 Java 的 java 命令,所以我打算将它添加到 cp。也许这会奏效。也许我唯一的问题是我不知道如何将它添加到 IntelliJ。

标签: java maven


【解决方案1】:

如果您通过 Maven 构建项目,则需要将导入 .jar 文件作为依赖项添加到要从中导入 .jar 的项目中

如果您的其他项目(您要导入的 .jar)已经由 Maven 构建,那非常容易做到。如果没有,您可以使用 mvn install:install-file 将其安装到本地 .m2 存储库(请参阅 https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html

在 pom 文件中引用 .jar 后,IntelliJ 将识别它。

也可以手动将 .jar 文件作为依赖项添加到 IntelliJ 中的模块。如果您已经在使用 Maven,我建议尽可能避免这种情况。如果需要,您可以转到您的项目设置,然后“模块”,选择您的模块,然后选择“依赖项”,然后单击加号为您的模块添加 .jar 依赖项。

【讨论】:

  • 很好,效果很好 - 我运行了mvn install:install-file 并将依赖项添加到我的 pom.xml 中,现在我的导入语句没有失败。只有一个问题...正如我提到的,我要导入的类称为 Main,而我想在其中使用它的类也称为 Main。现在发生了冲突。我必须重命名我想在其中使用它的类吗?我想可能没有“import x as y”功能,因为那样事情会变得很奇怪。
  • 你可以有两个 Mains 但它们需要在不同的包中。
  • 尝试将 package 语句添加到您的一个 jar 中的 Main 类
  • 我想我只是要在我的主程序中重命名 Main 类。但只是为了帮助我理解这里发生了什么,为什么安装到我的 Maven 存储库(并将其添加到 pom.xml)在这里有帮助?是因为 IntelliJ 解析 pom.xml,获取依赖项,并将它们在其 Maven 存储库中的位置添加到它在解析源文件时使用的 Java 的类路径(我认为它有自己的 Maven 存储库,尽管我不肯定) ?
  • 完全正确。 IntelliJ 将从您的 pom.xml 构建其项目文件,这会将依赖项拉入您的模块依赖项(上面的屏幕截图)。这就是为什么我不建议混合使用这两种方法。此外,如果您将依赖项添加到 intellij 而不是您的 pom,您将无法再仅使用 maven 构建项目。我还看到 IntelliJ 有时会从 pom 刷新项目,您必须返回并再次手动添加您的依赖项。您通常会有一个 maven 存储库,它位于您的用户主目录 / .m2
猜你喜欢
  • 2013-10-16
  • 2016-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-10-01
  • 2017-04-13
  • 2014-10-21
  • 2018-09-02
  • 2014-07-12
相关资源
最近更新 更多