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

时间:2016-09-01 14:12:30

标签: java maven intellij-idea jar dependencies

我正在使用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。我还在“文件 - &gt;项目结构”中尝试了很多东西,但仍然没有工作......

我只想用我的依赖项构建我的JAR,所以我可以使用以下命令在控制台中运行我的应用程序:

java -jar myproject.jar

我该怎么做?谢谢你的帮助!

2 个答案:

答案 0 :(得分:24)

我终于设法使用Intellij Java生成这个JAR,我就是这样做的:

  • 在pom.xml文件中添加依赖项
  • 转到文件 - &gt;项目结构 - &gt;文物 - &gt;新 - &gt; JAR - &gt;来自具有依赖关系的模块
  • 选择Main类,然后单击OK
  • 在您的项目中,在src / main中,创建“resources”文件夹
  • 在此“资源”文件夹中移动“META-INF”(其中包含MANIFEST.MF)文件夹
  • 转到Build - &gt;构建工件来构建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”和“package”maven命令。

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

答案 1 :(得分:4)

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

你需要使用Maven插件。以下是示例程序集插件配置jar-with-dependencies

<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