【问题标题】:How to build jars from IntelliJ properly?如何正确地从 IntelliJ 构建 jar?
【发布时间】:2010-11-08 03:06:06
【问题描述】:

我有一个包含单个模块和一些依赖项的项目。 我想在一个单独的目录中创建一个包含已编译模块的 jar。另外,我想让依赖项出现在我的模块旁边。

无论我如何扭曲 IntelliJ 的“构建 jar”过程,我的模块的输出都是空的(除了一个 META-INF 文件)。

【问题讨论】:

    标签: java intellij-idea jar build-process


    【解决方案1】:

    这是使用 IntelliJ 10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/ 构建 jar 的方法

    文件 -> 项目结构 -> 项目设置 -> 工件 -> 点击绿色加号 -> Jar -> 来自具有依赖关系的模块...

    上面将“骨架”设置为将保存 jar 的位置。要实际构建并保存它,请执行以下操作:

    解压到目标Jar

    好的

    构建 |构建工件 |构建

    尝试从

    中提取 .jar 文件

    项目名称 |出|文物 |项目名称_jar |项目名称.jar

    【讨论】:

    • 当您包含的 jar 中的某些类使用 RSA 签名时,它会失败。
    • 这个方法还是失败,jar文件没有执行
    • 看来有人真的很努力才没有让它发挥作用。真是太遗憾了,它永远不会起作用。我已经尝试了至少 50 种不同的答案,但都没有奏效。而且每次都是同一个故事。现在我预留了一周的时间来将其输出为 jar,因为我们公司的每个人都认为在生产输出 jar 时需要付出真正的努力。
    • 正如许多人在我之前写的那样,这是一种有时有效的简化。请参阅下面的@zsolt tolvali 的回答。从 IntelliJ 的角度来看,在创建新项目时将 JAR 创建过程设为默认活动会很好,因为很少有人不需要它!
    • 快到2020年了,自动驾驶汽车也差不多了,还是不知道如何在Intellij中创建可执行jar
    【解决方案2】:

    这在 2017 年仍然是一个问题,我希望它可以帮助到那里的人! 我发现在 IntelliJ 2017.2 下创建工作 jar-s 的 2 种可能性

    1.从 IntelliJ 创建工件:

    • 转到项目结构:

    • 创建一个新工件:

    • 选择主类,一定要改manifest文件夹:

    您必须更改清单目录:

    <project folder>\src\main\java 
    

    将“java”替换为“资源”

    <project folder>\src\main\resources
    

    它应该是这样的:

    • 然后选择要打包到 jar 中的依赖项,或者 NEAR jar 文件

    • 要构建您的工件,请转到构建工件并选择“重建”。它将使用您的 jar 文件及其依赖项创建一个“out”文件夹。

    2。使用 maven-assembly-plugin

    将构建部分添加到 pom 文件中

        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-assembly-plugin</artifactId>
                    <configuration>
                        <finalName>ServiceCreate</finalName>
                        <appendAssemblyId>false</appendAssemblyId>
                        <archive>
                            <manifest>
                                <mainClass>com.svt.optimoo.App</mainClass>
                            </manifest>
                        </archive>
                        <descriptorRefs>
                            <descriptorRef>jar-with-dependencies</descriptorRef>
                        </descriptorRefs>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    • 创建新的运行/调试配置:

    • 选择应用程序:

    • 填写表格
    • 在构建后添加“assembly:single”maven 目标以最后执行

    • 保存,然后运行

    此过程将在“目标”文件夹下创建 jar 文件

    【讨论】:

    • 将 manifest 目录改为 src/resources 是关键!!!谢谢~
    • 这个 MANIFEST 路径是最关键的,感谢@Zsolt Tolvaly
    • 我得到no main manifest attribute采用上述解决方案。没有人提到更改path to manifest。谢谢!!
    • 这应该是最佳答案。谢谢!
    • scala 中的源代码怎么样? java不是我用的
    【解决方案3】:

    我最近遇到了这个问题,如果任何先前的解决方案或链接缺少详细信息,我认为这些步骤很容易遵循。

    如何使用 IntelliJ IDEA 14.1.5 创建.jar

    1. 文件 > 全部保存。
    2. 使用 main 方法运行驱动程序或类。
    3. 文件 > 项目结构。
    4. 选择选项卡“工件”。
    5. 点击窗口顶部附近的绿色加号按钮。
    6. 从添加下拉菜单中选择 JAR。选择“来自具有依赖项的模块”
    7. 选择主类。
    8. 单选按钮应选择“提取到目标 JAR”。按确定。
    9. 选中“基于制作”复选框
    10. 按应用并确定。
    11. 从主菜单中,选择构建下拉菜单。
    12. 选择选项构建工件。

    【讨论】:

    • 你错过了什么吗?有一个关于模块的选项应该是什么。在我的情况下,它正在创建 JAR,但由于安全性而导致 JVM 通过错误。
    • 我认为这份清单就是一切。由于安全原因,您的 java 设置可能会阻止它。其他人对此有什么想法吗?
    • 遵循相同,我有错误:运行此 jar 文件时无法找到或加载主类 JavaFundamentals.jar。在这里解释:stackoverflow.com/questions/40636790/…
    • 每次我想要构建一个 jar 时都必须执行这 12 个步骤的过程,还是 IntelliJ 会记住这些操作以便您可以使用快捷方式?
    【解决方案4】:

    对于那些像我一样受益于图像的人:

    文件 -> 项目结构

    【讨论】:

    • @samuelowino 我不喜欢你这么说。解释什么“根本不起作用”。
    • 嘿@Crt 我没有检查正确的 jar 文件,显然,Inteliji 在不同的目录中生成了两个 jar 文件,抱歉,我的错,你的解决方案有效,谢谢
    • @Crt 我尝试了上述步骤。但我在 myFile-0.1.jar 中一直没有得到主要的清单属性
    【解决方案5】:

    这里有 2 个使用 maven 项目的示例,一步一步:

    方法一:用maven和pom.xml构建jar

    1. 文件、新建、项目、maven
    2. 创建一个包,在该包内创建一个java程序
    3. 在 pom.xml 中,添加 maven-jar-plugin。

          <plugin>
              <!-- Build an executable JAR -->
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>3.1.0</version>
              <configuration>
                  <archive>
                      <manifest>
                          <addClasspath>true</addClasspath>
                          <classpathPrefix>lib/</classpathPrefix>
                          <mainClass>somePackage.sample</mainClass>
                      </manifest>
                  </archive>
              </configuration>
          </plugin>
      

    屏幕截图: 4.点击搜索图标打开maven项目框并输入maven,

    1. 点击清理,然后点击安装

    2. 您的 jar 文件将显示在目标文件夹中

    3. 使用 java -jar

    方法2:使用maven构建jar,无需更改pom.xml

    1. 文件、新建、项目、maven
    2. 创建一个包,在该包内创建一个java程序(同上)
    3. 文件 -> 项目结构 -> 项目设置 -> 工件 -> 点击绿色加号 -> Jar -> 来自具有依赖关系的模块

    非常重要!

    MANIFEST.MF 需要在您的资源文件夹中,而 Main.Class 需要引用 {package}-{class-name-that-c​​ontains-main-class}

    1. 然后点击菜单上的构建、构建工件、构建

    1. 在 out 文件夹中找到 jar

    1. 运行它:)

    【讨论】:

    • 这行得通。你能解释一下为什么 MANIFEST.MF 需要在那个目录中吗?
    • 这对我有帮助
    • 这很有帮助!第二个选项对我来说效果最好。快速更新:IntelliJ 会打开一个额外的向导来创建清单文件。这将允许您创建它并将其放置在正确的位置,而无需编写任何内容。
    • 这很有帮助
    【解决方案6】:

    当我使用these solution 这个错误来了:

    java -jar xxxxx.jar
    

    没有主清单属性,在 xxxxx.jar 中

    解决方案是

    您必须更改清单目录:

    <project folder>\src\main\java 
    

    把java改成资源

    <project folder>\src\main\resources
    

    【讨论】:

    • 我已经有了,但还是有问题
    【解决方案7】:

    可能有点晚了,但我设法以这种方式解决了它-> 用winrar打开并删除META-INF文件夹中的ECLIPSEF.RSA和ECLIPSEF.SF,然后在MANIFEST.MF中放入“Main-class:main_class_name”(不带“.class”)。确保在最后一行之后按两次“Enter”,否则将不起作用。

    【讨论】:

    【解决方案8】:

    我试图从一个多模块 Kotlin 应用程序构建一个 jar,但遇到了臭名昭著的“无主清单属性”错误。在src/main/resources 中创建清单目录也不起作用。

    相反,当直接在src 中创建它时,它可以工作:src/META-INF/MANIFEST.MF

    【讨论】:

    • 嗨,谢谢它工作正常。但是现在我有一个新错误,它没有找到资源“java.desktop/javax.swing.ImageIcon java.lang.NullPointerException”
    【解决方案9】:

    正如上面的人所说,但我必须注意一点。 您必须选中复选框:

    包含在项目构建中

    【讨论】:

      【解决方案10】:

      有了 Maven,你可以使用这个插件:

       <build>
          <plugins>
      
              <plugin>
                  <artifactId>maven-assembly-plugin</artifactId>
                  <configuration>
                      <archive>
                          <manifest>
                              <mainClass>[path you class main]</mainClass>
                          </manifest>
                      </archive>
                      <descriptorRefs>
                          <descriptorRef>jar-with-dependencies</descriptorRef>
                      </descriptorRefs>
                  </configuration>
                  <executions>
                      <execution>
                          <id>make-assembly</id>
                          <phase>package</phase> 
                          <goals>
                              <goal>single</goal>
                          </goals>
                      </execution>
                  </executions>
              </plugin>
          </plugins>
      </build>
      

      【讨论】:

        【解决方案11】:

        想法 8.1.3

        jar 没问题,因为'output' 目录(project/out/production//)中有编译输出

        我猜,你必须在构建 jar 之前运行“make”

        对于依赖项,只需检查“显示库”并选择您想要的。

        【讨论】:

        • 没有 gradle 它正常工作,但是当我在 IntelliJIdea 中构建基于 gradle 的项目时,它显示 C:\Validate\out\artifacts\Validate_jar>java -jar Validate.jar 错误:找不到或加载主类验证原因:java.lang.ClassNotFoundException:验证
        【解决方案12】:

        这里是IntelliJ IDEA 2018.3 Help的官方解答。我试过了,效果很好。

        从模块构建 JAR 文件;

        1. 在主菜单上,选择 Build |构建工件。

        2. 从下拉列表中,选择 JAR 类型的所需工件。 列表显示为当前项目配置的所有工件。要构建所有已配置的工件,请选择 Build all 工件选项。

        【讨论】:

          【解决方案13】:

          我的问题是:我使用了 Intellij IDEA(尝试了不同的版本)+ Gradle。 当我编译项目并构建 artifacf jar 时,如上述响应所示,我收到一个错误 - “没有主要清单属性 ...”

          这个解决方案对我有用(特别感谢 Thilina Ashen Gamage(见上文)的提示):

          摘录 - 如果您使用外部库并通过项目设置 - 工件 - 添加 (+) - Jar - 从具有依赖项的模块 构建项目,那么可能是因为 META-INF 的程序错误包含 MANIFEST_MF 文件的文件夹不包括 jar。为避免它创建 EMPTY jar 文件。

          项目设置 - 工件 - 添加 (+) - Jar - EMPTY JAR。 META-INF 文件夹将添加到 resources 文件夹中。然后选择你的主要课程。您将看到以下 jar 结构: 注意文件夹 META-INF 的存在 然后,您可以构建您的项目并构建工件。该解决方案也适用于 javaFX 应用程序。

          【讨论】:

            【解决方案14】:

            使用

            mvn clean package spring-boot:repackage
            

            在 IntelliJ 终端中输入上述命令。它会生成一个带有可执行 Jar 的目标文件。

            【讨论】:

              【解决方案15】:

              您可能想看看 Maven (http://maven.apache.org)。您可以将其用作应用程序的主要构建过程,也可以仅通过“编辑配置”对话框执行某些任务。在 Maven 中创建一个模块的 JAR 的过程相当简单,如果您希望它在一个可自执行的 JAR 中包含所有依赖项,这也是微不足道的。

              如果您以前从未使用过 Maven,那么您想阅读Better Builds With Maven

              【讨论】:

              • Maven 对于像创建 jar 这样的简单任务显然是开销。也许是 Ant,但肯定不是 maven。
              • 链接失效(2014 年 10 月)
              • @KathyA。谢谢 - 已更新以使用 Maven 团队的建议。
              • 如果它如此微不足道,为什么不将它包含在您的答案中?
              • 因为我希望读者访问该站点并开始学习过程。
              【解决方案16】:

              如果您在项目中使用第三方库,或者在正确创建 MANIFEST.MF 文件时遇到问题,则在运行使用

              生成的 JAR 文件时可能会发生冲突
              File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....
              

              上面提到的方法。

              相反,我建议您创建一个空 JAR 并将所有其他元素手动添加到输出根目录。可以在此处找到有关此方法的精彩博客文章:http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/ 我尝试了那里提到的步骤,一切对我来说都很好!

              【讨论】:

              • 谢谢,这对我有帮助! Intellij 中似乎存在一个错误,如果您选择“JAR”作为工件类型而不是“其他”,则项目的清单在 JAR 中被默认清单覆盖。
              【解决方案17】:

              其他一些答案没有用,因为一旦您从 maven 项目重新导入 IntelliJ IDEA 项目,所有更改都将丢失。

              jar 的构建需要由运行/调试配置触发,而不是由项目设置触发。

              Jetbrains 在这里很好地描述了如何实现这一点:

              https://www.jetbrains.com/help/idea/maven.html

              向下滚动到“为 Maven 目标配置触发器”部分。

              (他们描述的唯一缺点是他们的屏幕截图是默认的黑白配色方案,而不是超级棒的 darcula 主题。呃!)

              所以,基本上,您所做的是打开“Maven 项目”面板,您会找到感兴趣的项目(在您的情况下,是构建您的 jar 的项目),在它下面您会找到您想要的 Maven 目标想要执行,(通常是“包”目标创建 jars,)你打开它的上下文菜单,(右键单击 Windows 机器,)并且会有一个“在运行/调试之前执行...”选项您可以选择它,它会从那里牵着您的手。真的很简单。

              【讨论】:

                【解决方案18】:

                如果您尝试使用 kotlin 构建 jar,则需要创建一个 src/main/java 文件夹并将此文件夹用作 META-INF 文件夹的位置。

                【讨论】:

                  【解决方案19】:

                  如果您因为遇到“找不到资源文件”错误而阅读此答案,请尝试以下操作:

                  1. 文件 -> 项目结构 -> Artiface -> 新建,类型为 Other
                  2. 给它起一个好听的名字,然后在Output Layout 中按Create Archive 来创建一个新的jar,然后再给它一个好听的名字;)
                  3. 点击刚刚添加的jar,将编译后的模块输出添加到jar中。
                  4. 再次点击jar,在下方窗格中,选择您的项目路径并添加Manifest File,然后正确设置Main ClassClass Path
                  5. 点击Add Library Files,选择需要的库(可以使用Ctrl+A全选)。
                  6. Build -> Build Artifact -> Clean & Build,看看错误是否消失。

                  【讨论】:

                    【解决方案20】:

                    使用 Gradle 构建您的项目,然后 jar 在构建文件中。这是有关如何使用 Gradle 构建 .jar 文件的 Stack Overflow 链接。

                    Java project with Gradle and building jar file in Intellij IDEA - how to?

                    【讨论】:

                      【解决方案21】:

                      如果你正在做 spring/mvn 项目,你可以使用这个命令:

                      mvn package -DskipTests
                      

                      jar 文件将保存在目标目录中。

                      【讨论】:

                        【解决方案22】:

                        Ant 和 Maven 被广泛使用。我更喜欢 Ant,我觉得它更轻量级,你的开发者更有控制力。有些人会认为这是它的缺点:-)

                        【讨论】:

                        • 这并不能解释为什么会发生错误。
                        猜你喜欢
                        • 2017-07-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2013-03-01
                        • 2013-06-10
                        • 2015-04-12
                        • 2013-07-15
                        相关资源
                        最近更新 更多