java - Intellij Java 2016 & Maven : how to embed dependencies in JAR?

标签 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 中。我还在“文件 -> 项目结构”中尝试了很多东西,但仍然无法正常工作......

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

java -jar myproject.jar

我该怎么做?感谢您的帮助!

最佳答案

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

  • 在pom.xml文件中添加依赖
  • 转到文件 -> 项目结构 -> Artifact -> 新建 -> JAR -> 来自具有依赖项的模块
  • 选择主类并点击确定
  • 在您的项目中,在 src/main 中,创建“资源”文件夹
  • 将“META-INF”(其中包含 MANIFEST.MF)文件夹移动到“资源”文件夹中
  • 转到 Build -> build artifacts 来构建 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)似乎仍然是强制性的。

关于java - Intellij Java 2016 & Maven : how to embed dependencies in JAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39273877/

相关文章:

git - 带有git的maven发布插件在子文件夹中不起作用

java - 在 IntelliJ IDEA 2016.1 中找不到创建新 Maven 项目的选项

java - 公历法

java - 三角带三角剖分

java - com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException : error in SQL syntax

javascript - 如何在 WebStorm 中的回调函数内记录 'this' 实例?

scala - 尝试远程调试 Spark 应用程序 : java. io.IOException“握手失败 - 连接过早关闭”

Java OkHttp3 只使用 Http/1.1 或 Http/2

unit-testing - "Implicit"插件 - 为什么 Maven 构建会通过 Surefire 运行测试,即使 POM 中没有提及?

java - Maven 更新具有不同父级的多模块项目