使用javac进行编译时无法在包中找到类

时间:2017-11-23 11:27:27

标签: classpath javac

我的目录中有以下结构:

public class AppListener implements HttpSessionListener {

    public void sessionCreated(HttpSessionEvent se) {
        System.out.println("Session created!");

    }

    public void sessionDestroyed(HttpSessionEvent se) {
        System.out.println("Session destroyed!");

    }

在BasicTest.java中,我有这些导入:

PROJECT
  - classes
      tunnelvisionlabs
          postgresql
              PostgreSqlLexer.class
              PostgreSqlLexerAtnSimulator.class
              PostgreSqlLexerUtils.class
  - lib
      antlr-4-7.jar

  - BasicTest.java

我尝试使用以下命令进行编译:

package com.tunnelvisionlabs.postgresql.test;

import com.tunnelvisionlabs.postgresql.PostgreSqlLexer;
import com.tunnelvisionlabs.postgresql.PostgreSqlLexerUtils;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import org.antlr.v4.runtime.ANTLRInputStream;
import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.Token;
import org.junit.Assert;
import org.junit.Test;

我收到这些错误:

javac -cp .:./lib/* BasicTests.java 

在PostgreSqlLexer和PostgreSqlLexerUtils类中,我在开头声明了这个包:

BasicTests.java:28: error: cannot find symbol
import com.tunnelvisionlabs.postgresql.PostgreSqlLexer;
                                      ^
  symbol:   class PostgreSqlLexer
  location: package com.tunnelvisionlabs.postgresql
BasicTests.java:29: error: cannot find symbol
import com.tunnelvisionlabs.postgresql.PostgreSqlLexerUtils;
                                      ^
  symbol:   class PostgreSqlLexerUtils
  location: package com.tunnelvisionlabs.postgresql

我的程序要查找这些类需要做什么?我尝试在lib中添加classes目录并使用与之前相同的命令,这样classpath也包含classes目录,但它不会改变任何内容。

1 个答案:

答案 0 :(得分:0)

如果我正确阅读了您的项目结构,BasicTest.java所在的源文件夹与lib文件夹处于同一级别。如果是,那么您可以使用以下javac类路径:

javac -cp .:lib/* BasicTests.java
            ^^^ lib/ is already where you are calling this

查看以下参考答案以获取更多信息:

Including all the jars in a directory within the Java classpath