IntelliJ - 在构建jar时包含依赖jar

时间:2017-03-06 16:32:15

标签: java intellij-idea jar

package com.Toby.Trains;

import com.Toby.StationManager;
import com.google.gson.Gson;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class Trains {
    public static void main(String[] args) {
        Gson gson = new Gson();
        BufferedReader bufferedReader = null;

        try {
            bufferedReader = new BufferedReader(new FileReader("routes.json"));
            StationManager routes = gson.fromJson(bufferedReader, StationManager.class);

            if (routes != null) {
                System.out.print(routes);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

我正在尝试使用Gson,这需要我把Gson jar作为依赖来使用它的类。

为此,我将其设置为模块下项目设置中的依赖项。这允许我导入正确的类,以便编译时没有错误。

The Modules Menu

这使jar显示在外部库下。

当我尝试在终端中运行已编译的jar时,它会给出java.lang.NoClassDefFoundError

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/gson/Gson
    at com.Toby.Trains.Trains.main(Trains.java:16)
Caused by: java.lang.ClassNotFoundException: com.google.gson.Gson
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more

看起来我的外部库没有被添加。如何使用正确的依赖项运行我的jar?

谢谢!

1 个答案:

答案 0 :(得分:0)

Sean提到用户构建系统可以帮助您管理依赖关系,它可以让您轻松生活。 或者,如果您只想使用jar,而不是将jar保存到不同的位置,请在项目中创建一个目录(比如说lib)并在那里移动所需的jar。使用IDE将创建的目录包含为依赖项,将其添加到类路径中。

对于intellij(2016.3),请转到“项目设置” - >图书馆 - >使用“Java”选项创建一个新库,并选择要用作库的目录。如果要将其用作jar目录,它将为您提供选项。选择此选项,然后它将要求您选择要使用此库的模块(如果您有多模块项目)。选择后,它会将库添加到您选择的模块中。