javac error: “package x does not exist” at “import

2019-02-16 07:36发布

问题:

I'm trying to compile my java file 'check4PrimeTest.java' using the command prompt with the following command:

javac -classpath .:junit.jar check4PrimeTest.java

I get the following error:

error: package junit.framework does not exist import junit.framework.*;

I'm not sure why i get this error as i have import junit.framework.* in my program.

below is my code:

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

回答1:

You are getting this error because you're trying to import a package without telling your system where the package is located. Here are instructions on telling your system where the package is located:

Your javac target doesn't specify anything apart from the source and target directory - it doesn't add any classpath entries; you'll need to add an entry for the appropriate JUnit jar file. See the javac task documentation for more details. You may want to specify the path to JUnit as a classpath attribute, a nested element, or a reference to a path declared elsewhere.

  • javac task documentation

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

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

EDIT: JUNIT INSTALLATION (from here):

Windows

To install JUnit on Windows, follow these steps:

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)

To install JUnit on Unix, follow these steps:

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`


回答2:

Your import statement tells the compiler that you need an artifact, in this case you're telling the compiler you need to use junit. But declaring you're using it and providing it to the JVM are different things. You need to make sure your junit jar file is on your classpath.

EDIT: By the way using an IDE will be a time saver for you. I realize eclipse can be intimidating, but I would recommend starting to use it. Unless you're more of a command line type of person, but even then if you're doing anything serious you should use an IDE IMO.



回答3:

You are getting this error because you are importing a package or using a jar file which it is unable to locate.

You should check your environment variables for classpath variable. Add the path of your jar file or your package to the classpath variable. Also, add your java file's class file path to the classpath variable if it shows the error "cannot load class, main file not found"

Hope this helps.!!



回答4:

If you are using Java 9 or later with JUnit 5 or later, then it is possible that the JUnit package is defined in a module, and you may need to use --module-path to point to the directory which contains the module/Modular JAR.