javac错误:“导入x”中的“包x不存在”

时间:2012-10-04 00:19:11

标签: java junit compiler-errors

我正在尝试编译我的java文件' check4PrimeTest.java'使用带有以下命令的命令提示符:

  

javac -classpath。:junit.jar check4PrimeTest.java

我收到以下错误:

  

错误:包junit.framework不存在import junit.framework。*;

我不知道为什么我会收到此错误,因为我在我的程序中导入了junit.framework。*。

下面是我的代码:

package check4prime;
// check4PrimeTest.java

//Imports 
import junit.framework.*;

public class check4PrimeTest extends TestCase {

    //Initialize a class to work with. 
    private check4Prime check4prime = new check4Prime();

    //constructor 
    public check4PrimeTest (String name) { 
        super(name);
    }

    //Main entry point 
    public static void main(String[] args) {
        System.out.println("Starting test...");
        junit.textui.TestRunner.run(suite());
        System.out.println("Test finished...");
    } // end main() 

    //Test case 1 
    public void testCheckPrime_true() {
        assertTrue(check4prime.primeCheck(3));
    }

    //Test cases 2,3 
    public void testCheckPrime_false() {
        assertFalse(check4prime.primeCheck(0));
        assertFalse(check4prime.primeCheck(1000));
    }

    //Test case 7 
    public void testCheck4Prime_checkArgs_char_input() { 
        try {
            String [] args= new String[1];
            args[0]="r";
            check4prime.checkArgs(args);
            fail("Should raise an Exception.");
        } catch (Exception success) { 
            //successful test
        }
    } //end testCheck4Prime_checkArgs_char_input() 

    //Test case 5 
    public void testCheck4Prime_checkArgs_above_upper_bound() {
        try { 
            String [] args= new String[1];
            args[0]="10001";
            check4prime.checkArgs(args);
            fail("Should raise an Exception.");
        } catch (Exception success) { 
            //successful test
        }
    } // end testCheck4Prime_checkArgs_upper_bound() 

    //Test case 4 
    public void testCheck4Prime_checkArgs_neg_input() {
        try { 
            String [] args= new String[1];
            args[0]="-1";
            check4prime.checkArgs(args);
            fail("Should raise an Exception.");
        } catch (Exception success) { 
            //successful test
        }
    } // end testCheck4Prime_checkArgs_neg_input()

    //Test case 6
    public void testCheck4Prime_checkArgs_2_inputs() {
        try { 
            String [] args= new String[2];
            args[0]="5";
            args[1]="99";
            check4prime.checkArgs(args);
            fail("Should raise an Exception.");
         } catch (Exception success) {
            //successful test 
         } 
    } // end testCheck4Prime_checkArgs_2_inputs 

    //Test case 8 
    public void testCheck4Prime_checkArgs_0_inputs() {
        try { 
            String [] args= new String[0];
            check4prime.checkArgs(args);
            fail("Should raise an Exception.");
        } catch (Exception success) { 
            //successful test
        } 
    } // end testCheck4Prime_checkArgs_0_inputs 

    //JUnit required method. 
    public static Test suite() { 
        TestSuite suite = new TestSuite(check4PrimeTest.class);
        return suite;
    } //end suite() 

} //end check4PrimeTest

5 个答案:

答案 0 :(得分:12)

您收到此错误是因为您尝试导入程序包而不告诉系统程序包所在的位置。以下是告诉您的系统软件包所在位置的说明:

  

您的javac目标除了源和之外没有指定任何内容   目标目录 - 它不添加任何类路径条目;你需要   为相应的JUnit jar文件添加条目。请参阅javac任务   文档了解更多详情。您可能想要指定路径   JUnit作为类路径属性,嵌套元素或对类的引用   路径在别处宣布。

来源:problem running JUnit tests with Ant in Eclipse. Beginner question

prompt> javac -classpath .;$JUNIT_HOME\junit4.x.x.jar test.java

编辑:JUNIT安装(来自here):

  

     

要在Windows上安装JUnit,请执行以下步骤:

1. Unzip the junit.zip distribution file to a directory referred to as %JUNIT_HOME%.

2. Add JUnit to the classpath (type the following into a command line shell): `set CLASSPATH=%CLASSPATH%;%JUNIT_HOME%\junit.jar`
     

Unix(bash)

     

要在Unix上安装JUnit,请执行以下步骤:

1. Unzip the junit.zip distribution file to a directory referred to as $JUNIT_HOME.

2. Add JUnit to the classpath (type the following into terminal):

`export CLASSPATH=$CLASSPATH:$JUNIT_HOME/junit.jar`

答案 1 :(得分:1)

您的import语句告诉编译器您需要一个工件,在这种情况下,您需要告诉编译器您需要使用junit。但是声明你正在使用它并将它提供给JVM是不同的事情。您需要确保您的junit jar文件位于类路径中。

编辑:顺便使用IDE将为您节省时间。我意识到eclipse可能令人生畏,但我建议开始使用它。除非你更像是一个命令行类型的人,但即便如此,如果你正在做任何严肃的事情,你应该使用IDE IMO。

答案 2 :(得分:1)

您收到此错误是因为您要导入包或使用无法找到的jar文件。

您应该检查环境变量的classpath变量。 将jar文件或包的路径添加到classpath变量中。 另外,将java文件的类文件路径添加到classpath变量中,如果它显示错误"无法加载类,找不到主文件"

希望这会有所帮助。!!

答案 3 :(得分:0)

如果您在JUnit 5或更高版本中使用Java 9或更高版本,则可能在模块中定义了JUnit包,您可能需要使用--module-path指向包含该模块的目录module / Modular JAR。

答案 4 :(得分:0)

在我的情况下, 在Windows 机器上,我只是 用分号代替冒号; 而且有效!

  

javac -cp。:./ abc.jar:./ def.jar Practice.java   Practice.java:2:错误:程序包com.coding.javapractice不存在

将:替换为;

  

javac -cp。; ../ abc.jar; ./ def.jar Practice.java

编译成功。