Java程序**运行**但不编译

时间:2017-08-10 08:57:37

标签: java intellij-idea

我是java新手,不言而喻。我正在使用IntelliJ。我偶然发现了一个我不明白的问题。我做了一个简化的程序来说明我的问题。它只检查数字是否在数组中。

import org.apache.commons.lang.ArrayUtils;


public class Test {
    public static void main(String[] args) {
        int[] list = new int[]{1,2,3};
        Boolean help = ArrayUtils.contains(list, 3);
        System.out.println(help);
    }
}

(ctrl + shift + f10)运行良好并返回true,但是当我去尝试编译时:
E:\ ... \ W1> javac test.java 我得到了:

test.java:1: error: package org.apache.commons.lang does not exist
        import org.apache.commons.lang.ArrayUtils;
        ^
        test.java:7: error: cannot find symbol
        Boolean help = ArrayUtils.contains(list, 3);
        ^
        symbol:   variable ArrayUtils
        location: class test
2 errors

我已经下载了commons-lang-2.6并将该文件夹标记为我的程序所在模块的库。我甚至已将该文件夹添加到CLASSPATH中。任何建议如何解决它和解释为什么发生这种情况将不胜感激。

3 个答案:

答案 0 :(得分:0)

您的IntelliJ使用不同的类路径来编译(和运行)您的程序,而不是命令行调用。您配置为依赖项的任何内容都必须添加到javac调用中。

更好的是:创建一个Maven或Gradle项目(IntelliJ有足够的支持)并使用它来编译项目。 IntelliJ将使用Maven配置,并在命令行上调用mvn package来编译和测试并打包所有内容。

答案 1 :(得分:0)

IntelliJ以更复杂的方式编译您的应用程序 - 它将该库添加到类路径中。

为什么你的程序会编译?您的尝试与将该数组存储在计算机上的随机目录中有何不同?

如果您真的想使用命令行进行编译只是为了看它是否有效,请将此jar添加到您的test类所在的文件夹中。请将其重命名为Test。您可以使用-cp标记来指出它。

对于未来,您应该学习Maven - 它解决了构建应用程序时的许多问题。

答案 2 :(得分:0)

solution获取apache commons jar

按照此处提及的步骤进行操作:http://www.java2s.com/Code/Jar/a/Downloadapachecommonsjar.htm

javac将创建.class文件,使用$ java

运行它

其他示例:https://stackoverflow.com/a/9395928/2987755