Kompilowanie kodu

0

Witam,
Mam takie dwie klasy, które po wrzuceniu do Eclipsa kompilują się elegancko:


public class Subscription {
	private int price;
	private int length;

	public Subscription(int p, int n) {
		price = p;
		length = n;
	}

	public double pricePerMonth() {
		double r = (double) price / (double) length;
		return r;
	}

	public void cancel() {
		length = 0;
	}

}

import static org.junit.Assert.assertTrue;

import org.junit.Test;

public class SubscriptionTest {

	@Test
	public void test_returnEuro() {
		System.out.println("Test if pricePerMonth returns Euro");
		Subscription S = new Subscription(200, 2);
		assertTrue(S.pricePerMonth() == 1.0);
	}

	@Test
	public void test_roundUp() {
		System.out.println("Test if pricePerMonth rounds up corrrectly...");
		Subscription S = new Subscription(200, 3);
		assertTrue(S.pricePerMonth() == 0.67);
	}

}

Teraz jeśli chcę sobie skompilować z linii poleceń, w Linuxie:
$ javac -classpath ~/Testowy/JUnit.jar SubscriptionTest.java
Wyskakuje
SubscriptionTest.java:9: cannot find symbol
symbol : class Subscription
location: class SubscriptionTest
Subscription S = new Subscription(200, 2);
razy 4
Jak dodam po dwukropku ścieżkę do class, też nie działa. Klasa Subscription jest skompilowana, wszystko znajduje się w katalogu Testowy

Co robię źle?

Pozdr

0

W zmiennej CLASSPATH katalogi i jary oddziela się średnikiem (nie dwukropkiem).

0

Jak średnikiem, to dla

javac -classpath /Testowy/JUnit.jar;/Testowy SubscriptionTest.java

jest:
javac: no source files
Usage: javac <options> <source files="files">
use -help for a list of possible options
-bash: /home/students/f534223/Testowy/: is a directory

0

Komunikat jest jasny: w katalogu bieżącym nie ma pliku SubscriptionTest.java.

0

OK, tylko dlaczego jeśli usunę to co po średniku(i sam średnik) daje efekt jaki opisałem w pierwszym poście?

0

dla ścisłości:
javac -classpath ~/Testowy/JUnit.jar SubscriptionTest.java

0

Na Linuksie chyba się jednak oddziela dwukropkiem.

0
tomek napisał(a)

dla ścisłości:
javac -classpath ~/Testowy/JUnit.jar SubscriptionTest.java

wydaje mi się, że już widzę błąd
to co widać wyżej ładuje tylko tego jednego jar-a

musisz dać tak
javac -classpath .:~/Testowy/JUnit.jar SubscriptionTest.java

jak ładujesz paczki to nie wolno ci zapomnieć o wszystkich innych :) bo ci załaduje tylko tą jedną którą podajesz. i takim odnośnikiem do domyślnych jest ' . ' <- kropka

0

'.' (kropka) nie jest odnośnikiem do domyślnych, kropka oznacza katalog bieżący.

0

hmm no nie jestem przekonany, bo mi ktoś kiedyś powiedział (a można mu raczej wierzyć), że jak wczytujemy javac -cp (totu) należy dać .:i nasze jar'y

0

Dzięki wszystkim za pomoc, a szczególnie mordimerowi :)

Poprawna odpowiedź:
javac -classpath .:/home/students/f534223/Testowy/JUnit.jar SubscriptionTest.java
będąc w katalogu Testowy
Co ciekawe, po oddzieleniu dwukropkiem nie można podać ścieżki w postaci ~/Testowy/JUnit.jar. Jeszcze raz dzięki!

0

Ty nie jesteś przekonany, a ja jestem pewien.
Fragment dokumentacji:

The default class path is the current directory. Setting the CLASSPATH variable or using the -classpath command-line option overrides that default, so if you want to include the current directory in the search path, you must include "." in the new settings.

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