【问题标题】:Create Jar Library Without a Main Class创建没有主类的 Jar 库
【发布时间】:2015-07-22 09:10:19
【问题描述】:

今天我刚刚创建了一个 Java 库。我使用 Main 类创建它,因为 IntelliJ IDEA 14 要求我添加一个。但是我希望它是一个普通的库,没有任何主类。是否可以从这样的项目创建一个 jar 文件而无需使用 main 方法的单个类?如果是这样,您如何创建这样的 jar。

如果你从不使用 main 方法,它似乎有点傻。

【问题讨论】:

  • 您是如何准确地告诉 IntelliJ 制作 jar 文件的,它是如何准确地提示您的?我怀疑您选择的选项暗示您确实想要一个 Main 类。
  • "从具有依赖关系的模块创建 jar 文件"
  • 主类只是使用“-jar”运行时使用的 MANIFEST.MF 中的一行。在其他情况下,它应该按照您的意愿行事。
  • 是的,但是因为它是一个库,所以这个类也可以在其中使用。添加一个没有任何功能的类似乎很奇怪。
  • 只删除 Main 类。你一开始不需要创建它。

标签: java intellij-idea jar main


【解决方案1】:

使用 Maven 之类的构建工具(无 IDE 依赖项,但可以从 IDE 调用)和 shade 插件来创建一个“超级”JAR(将所有需要的依赖项包含到项目的一个最终 JAR 中)...

“pom.xml”

...

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>2.3</version>
    <executions>
       <!-- Run shade goal on package phase -->
      <execution>
        <phase>package</phase>
        <goals>
          <goal>shade</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

Shade 插件的文档:

https://maven.apache.org/plugins/maven-shade-plugin/

【讨论】:

  • 同意这应该是“正确”的答案。 IDE不应该有任何依赖。
  • 确实 - 有太多关于编程的帖子深入 IDE 细节,与语言或任何最终的服务器端“运行时”实现无关。
【解决方案2】:

您可以通过几种方式来实现,例如从命令行、IDE、maven 或其他构建工具,我描述了两种方式:

命令行:

您可以从命令行创建 jar 文件(无需 IDE),这里是参考:https://docs.oracle.com/javase/tutorial/deployment/jar/build.html

jar cf jar-file input-file(s)

jar-file 是您想要的 .jar 文件名,input-file(s) 是您想要放入库中的文件(可以是通配符,例如:*.class

Intellij 理念:

像本文一样创建 Artifact,但不指定 Main 类 http://blog.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/

然后单击构建 > 构建工件 > 构建

即使没有 Main 类也可以使用。

【讨论】:

  • 感谢您清除此问题!看起来很奇怪,当我将新库放在另一个项目中时,它仍然在库文件夹中显示 Main 类。这正常吗?
  • 库中有主类吗?
  • 这是一个糟糕的答案,当有更合适的(记录在案的,非 IDE 特定的)方法时,会显示一些(其他)IDE 的图片。
  • 我想,问题是:如何在 IntelliJ 中做到这一点 - 从命令行有答案。我编辑了答案并将这种可能性放入其中。
  • 问题(简​​洁地)是:“是否可以创建一个 jar 文件 [] 而没有使用 main 方法的单个类?如果是,你如何创建这样的 jar。”
猜你喜欢
  • 1970-01-01
  • 2012-10-26
  • 2017-08-22
  • 1970-01-01
  • 2016-12-02
  • 2019-12-30
  • 2021-01-26
  • 2016-09-29
  • 1970-01-01
相关资源
最近更新 更多