IntelliJ Java 2016&Maven:如何在JAR中嵌入依赖项?

3phpmpom  于 2022-10-07  发布在  Java
关注(0)|答案(2)|浏览(126)

我正在使用IntelliJ Java 2016.2.2和Maven创建一个非常简单的Java控制台应用程序。

我想添加一个外部库,所以我在Maven中添加依赖项,如下所示:

<dependency>
    <groupId>jline</groupId>
    <artifactId>jline</artifactId>
    <version>2.12</version>
</dependency>

当我在IDE中运行它时,它运行得很好,但在外部控制台中运行不正常(我有以下错误:java.lang.NoClassDefFoundError)。

我检查了一下,由于某种原因,外部JAR没有添加到我刚刚生成的JAR中。我也在“文件->项目结构”中尝试了很多方法,但仍然不起作用……

我只想构建包含依赖项的JAR,这样我就可以简单地使用以下命令在控制台中运行应用程序:

java -jar myproject.jar

我怎么能做到这一点?谢谢你的帮忙!

e0bqpujr

e0bqpujr1#

我终于设法用IntelliJ Java生成了这个JAR,下面是我是如何做到的:

  • 在pom.xml文件中添加依赖项
  • 转到文件->项目结构->构件->新建->JAR->从带有依赖项的模块
  • 选择主类,然后单击确定
  • 在您的项目中,在src/main中创建“Resources”文件夹
  • 将META-INF(其中包含MANIFEST.MF)文件夹移动到此“Resources”文件夹中
  • 转到构建->构建构件以构建JAR

编辑

一种更好(也更容易)的方法是在pom.xml文件中添加以下行:

<build>
    <plugins>
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>your.MainClass</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>

然后使用“CLEAN”和“PACKET”maven命令。

上面的最后3个步骤(关于MANIFEST.MF)似乎仍然是强制性的。

8gsdolmq

8gsdolmq2#

好的,所以您基本上想要创建一个“胖JAR”(有时称为汇编),它包含它自己的所有依赖项(通常,依赖项是外部的)。

为此,您需要使用Maven插件。下面是一个示例程序集插件配置JAR-with-Dependents:

<project>
  ...
  <build>
    ...
    <plugins>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.6</version>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
        </configuration>
        ...
</project>

然后,只需运行

mvn package

相关问题