如何从IntelliJ正确地构建jar ?

我有一个项目,包含一个单独的模块,和一些依赖。 我想在一个单独的目录中创建一个JAR,其中包含编译后的模块。此外,我希望在我的模块旁边有依赖项

无论我如何歪曲IntelliJ的“build jar”;进程,我的模块的输出显示为空(除了一个META-INF文件)。

820550 次浏览

8.1.3想法

Jar是可以的,因为在'output'目录(project/out/production//)中有编译输出

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

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

您可能想看一看Maven (http://maven.apache.org)。您既可以将它用作应用程序的主要构建过程,也可以仅通过Edit Configurations对话框执行某些任务。在Maven中创建一个模块的JAR的过程是相当简单的,如果您希望它在一个可自行执行的JAR中包含所有依赖项,那么这个过程也是非常简单的。

如果您以前从未使用过Maven,那么您希望阅读使用Maven更好地构建

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

下面是如何用intellij10 http://blogs.jetbrains.com/idea/2010/08/quickly-create-jar-artifact/构建一个罐子

# EYZ0→# EYZ1→# EYZ2→# EYZ3→点击绿色加号 -># EYZ5→# EYZ6

如果您需要使jar可运行,则选择主类(使用main()方法的那个)。

上面设置了“骨架”;到罐子被保存的地方。要实际构建并保存它,请执行以下操作:

提取到目标Jar

好吧

构建|构建Artifact |构建

尝试从。jar文件中提取

ProjectName | out | artifacts | ProjectName_jar | ProjectName.jar

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

我最近遇到了这个问题,如果之前的解决方案或环节缺少细节,我认为这些步骤很容易遵循。

如何使用IntelliJ IDEA 14.1.5创建.jar:

  1. 文件>保存全部。
  2. 用main方法运行驱动程序或类。
  3. 文件>项目结构。
  4. 选择标签“Artifacts”。
  5. 点击窗口顶部附近的绿色加号按钮。
  6. 从添加下拉菜单中选择JAR。选择“From modules with dependencies”
  7. 选择主类。
  8. 单选按钮应该选择“提取到目标JAR”。按下OK。
  9. 选中“基于生成构建”复选框
  10. 按应用并确定。
  11. 从主菜单中,选择build下拉菜单。
  12. 选择选项构建构件。

在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>

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

File > Project Structure > Artifacts > '+' > JAR > From modules with dependencies > .....

上述方法。

相反,我建议您创建一个空JAR,并手动将所有其他元素添加到输出根中。关于这种方法的一篇精彩的博客文章可以在这里找到:http://karthicraghupathi.com/2016/07/10/creating-an-executable-jar-in-intellij-idea/我尝试了上面提到的步骤,一切都很顺利!

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

# eyz0 -> # eyz1

enter image description here

enter image description here

enter image description here

enter image description here

这仍然是2017年的一个问题,我希望它能帮助到那里的一些人! 我发现在IntelliJ 2017.2

下创建工作罐的2种可能性

1. 从IntelliJ创建工件:

  • 进入项目结构:

File menu

  • 创建一个新的工件:

Create a new artifact

  • 选择主类,并确保更改manifest文件夹:

enter image description here

您必须更改清单目录:

<project folder>\src\main\java

将“java”替换为“resources”

<project folder>\src\main\resources

它应该是这样的:

正确的方式为新的清单

  • 然后你选择你想要打包在jar或jar文件附近的依赖项

  • 要构建您的工件,请前往构建工件并选择“重建”。它将创建一个包含jar文件及其依赖项的“out”文件夹。

enter image description here

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>
  • 创建新的运行/调试配置:

Create a new run/debug configuration: .

  • 选择应用程序:

Choose application .

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

enter image description here

最终设置

  • 保存它,然后运行

enter image description here

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

JAR文件位置

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

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

Jetbrains在这里描述了如何实现这一目标:

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

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

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

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

如果你试图用kotlin构建一个jar,你需要创建一个src/main/java文件夹,并使用这个文件夹作为META-INF文件夹的位置。

如果你在spring/mvn项目中工作,你可以使用这个命令:

mvn package -DskipTests

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

以下是IntelliJ IDEA 2018.3帮助的官方答案。我试过了,成功了。

要从模块构建JAR文件;

  1. 在主菜单上,选择Build | Build Artifact。

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

这里有2个maven项目的例子,一步一步:

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

  1. 文件、新建、项目、maven
  2. 创建一个包,在这个包中创建一个Java程序 李# EYZ0 < / >
  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>
    

screen capture: enter image description here 4. open maven project box by click on the search icon and type maven, enter image description here

  1. click on clean, then click on install enter image description here

  2. your jar file will show up inside the target folder enter image description here

  3. test your jar using java -jar

enter image description here

Method 2: Build jar with maven without pom.xml change

  1. File, new, project, maven
  2. create a package , create a java program inside that package (same as above)
  3. File -> Project Structure -> Project Settings -> Artifacts -> Click green plus sign -> Jar -> From modules with dependencies

Very important!

The MANIFEST.MF needs to be in your resources folder and the Main.Class needs to refer to {package}-{class-name-that-contains-main-class}

enter image description here enter image description here

  1. then click build on menu , build artifacts, build

enter image description here

  1. find the jar in the out folder

enter image description here

  1. run it :)

enter image description here

当我使用这些解决方案这个错误来:

java -jar xxxxx.jar

在xxx.jar中没有主清单属性

# EYZ0:

您必须更改清单目录:

<project folder>\src\main\java

将Java更改为资源

<project folder>\src\main\resources
我的问题是:我使用Intellij IDEA(尝试了不同的版本)+ Gradle。 当我编译项目并构建artifacf jar时,如上面的响应所示,我收到了一个错误-“没有主清单属性…”< / p >

这个解决方案对我来说很有效(特别感谢Thilina Ashen Gamage提供的建议):

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

< p > # EYZ0。META-INF文件夹将添加到资源文件夹。然后选择你的主类。你会看到以下罐子结构: 注意存在一个文件夹META-INF 注意存在一个文件夹META-INF 然后您就可以构建项目和构件了。这个解决方案也适用于javaFX应用程序

我试图从多模块芬兰湾的科特林应用程序构建一个jar,并得到臭名昭著的“没有主清单属性”错误。在src/main/resources中创建清单目录也没有工作。

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

enter image description here

enter image description here

如上所述,但我必须指出一点。 你必须选中复选框:

包括在项目构建中

如果你正在阅读这个答案,因为你正面临“资源文件未找到”;错误,试试这个:

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

使用Gradle来构建你的项目,然后jar就在构建文件中。这是一个Stack Overflow链接,介绍如何用Gradle构建.jar文件。

Java项目与Gradle和构建jar文件在Intellij IDEA -如何?< / >

使用

mvn clean package spring-boot:repackage

在IntelliJ终端中输入以上命令。它生成一个带有Executable Jar的目标文件。

我试了大部分给出的答案,但就我的情况而言,“out”;文件夹(包含jar文件)未被创建。这就完成了任务:

构建→构建工件->(你会看到类名)->构建

现在,“out"文件夹被创建,jar文件在其中。