开发者

Using multiple .jar with javac

pardon my terminology. I'm trying to use three jar files with a java program for my CS class. The first is funjava, a simplified java language, and the others are class definitions color and geometry. Here is my code and what happens when I try to run it.

import colors.*;

class Canvas{

 public static void main(String [] args){
  System.out.println("test123"); 

  Circle cr1 = new Circle( new Posn(1,2), 5, "blue");
  Circle cr2 = new Circle( new Posn(5,4), 3, "red");
 }

}

class  Circle{

 Posn center;
 int rad;
 String color;

 Circle(Posn p, int r, String c){
  this.center = p;
  this.rad = r;
  this.color = c;  
 }

}

class Posn{

 int x;
 int y;

 Posn(int x, int y){
  this.x = x;
  this.y = y;  
 }

}

The last argument of Circle should be a color from the colors.jar, not a string.

niko@niko-laptop:~/Classes/Fundies2$ javac -cp *.jar Canvas.java 
error: Class names, 'funjava.jar,geometry.jar', are only accepted if annotation processing is explicitly requested
1 error
niko@niko-laptop:~/Classes/Fundies2$ ls
1-20-10.java  1-21-10.java  Book.class  Canvas.class  Circle.java  Examples.class  funjava.jar   hw1~        Main.java    OceanWorld.java
1-21-10       Author.class  book.java   Canvas.java   colors.jar   Examples.java   geometry.jar  Ishape      OceanWorld   Posn.class
1-21-10~      Author.java   Book.java   Circle.class  Combo.java   Fundies2.txt    hw1           Main.class  OceanWorld~  Rect.java

So how do I explicitly request annotation processing? Thank开发者_开发知识库 you.


In addition to Romain Muller's answer:

If you want to quickly use all of the *.jar files in the current directory, and you're using JDK 6 or later, you can use a single-asterisk. In a unix shell (like in Linux), you'll need to escape the asterisk:

javac -cp \* Canvas.java

This works when running the Java application as well:

java -cp .:\* Canvas

Note the .: to tell Java to look in the current directory as well as the *.jar files to find Canvas.class.

On Windows, use a semicolon (;) instead of a colon as a separator.


As far as I know, the -cp option requires classpath to be specified as a colon or semi-colon-separated list of places in most situations, and not a comma-separated list as your OS seems to derivate when expanding *.jar.


I am not sure why, but for me (on windows 10, java 17), the only thing that worked was:

javac -cp .;* Canvas

With semi-colon, and without the \ that exists in @ZoogieZork answer

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜