Jak działa -classpath w Javie ? proszę o pomoc

0

Witam

Próbuję zrozumieć zasadę działania kompilacji w javie z parametrem java -classpath

Katalog development zawiera plik A.java oraz katalog xcom zawierający B.java oraz B.class

Plik A posiada taką zawartość:

import xcom.B;

public class A
{
	public static void main(String[] args)
	{
		B b = new B();
		System.out.println("Ok");
	}
}

a plik B taką:

 
package xcom;

public class B
{
	
}

Jestem w katalogu development i wydaje polecenie:

javac -classpath xcom A.java

Przez taki zapis chcę wskazać że javac ma szukać tego co tam potrzebuje klasa A w katalogu xcom, a otrzymuje takie coś:

 
tomasz@tomasz-Aspire-5610:~/Pulpit/development$ javac -classpath xcom A.java
A.java:2: package xcom does not exist
import xcom.B;
           ^
A.java:8: cannot access B
bad class file: xcom/B.class
class file contains wrong class: xcom.B
Please remove or make sure it appears in the correct subdirectory of the classpath.
		B b = new B();
		^
2 errors

a gdy wywołam: tomasz@tomasz-Aspire-5610:~/Pulpit/development$ javac -classpath . A.java

To o dziwo wszystko gra.

Czy ktoś mógłby mi wytłumaczyć o co biega?

Jakoś nie jest to dla mnie intuicyjne. Jak wskazuję . - bieżący katalog to pewnie przeszukuje też podkatalogi. Ale nie rozumie dlaczego nie chce to zadziałać jak wrzucam nazwę katalogu jako ścieżkę względną.??

Dzięki wielkie :)

0

Na mój gust (niesprawdzane) to jak jest klasa blA/blE/klasa to Java szuka jej w katalogu classpath/blA/blE, a więc w przykładzie powyżej jak dasz classpath=xcom to Java zacznie szukać klasy xcom.B w katalogu xcom/xcom/

Powiedz mi jak, wg twojej intuicji powinniśmy skompilować projekt z dwiema klasami:

  • pakietA.klasaA
  • pakietB.klasaB
    Przecież nie podamy tutaj za classpath katalogu pakietA.
0

Już obczaiłem jak to działa.

Po prostu jak klasa jest w jakimś pakiecie to podczas szukania musi być zachowana kolejność katalogów.

Np. jak klasa posiada import org.utils.myApp i mamy katalogi /home/tomasz/myapp/org/utils/myApp/MyClass.class

To aby skompilować coś dajemy: javac -classpath /home/tomasz/myapp/ MyMainClass.java

:)

Chyba tako to działa?

0

Już obczaiłem jak to działa.

Po prostu jak klasa jest w jakimś pakiecie to podczas szukania musi być zachowana kolejność katalogów.

Np. jak klasa posiada import org.utils.myApp i mamy katalogi /home/tomasz/myapp/org/utils/myApp/MyClass.class

To aby skompilować coś dajemy: javac -classpath /home/tomasz/myapp/ MyMainClass.java

:)

Chyba tako to działa?

1 użytkowników online, w tym zalogowanych: 0, gości: 1