Java i classpath - co zrobić, aby uniknąć błędów?

0

Witam

Mam projekt javowy w takiej sciezce /home/mojlogin/projekt/

i w nim bibliotekę oraz 2 puste klasy (w jednej importuje poi)

-lib/
    --poi/
         ---pliki.jar 
-src/
    --Klasa1.java
    --Klasa2.java
-run.sh

Napisalem sobie skrypt bashowy w run.sh, ktory wyglada nastepujaco:

#!/bin/bash                                                                              
javac -cp /lib/poi/poi-3.10.1-20140818.jar src/*.java

Wykonuję go i wywala:

src/Klasa1.java:2: error: package org.apache.poi.hssf.usermodel does not exist
import org.apache.poi.hssf.usermodel.HSSFCell;
                                    ^
src/Klasa1.java:3: error: package org.apache.poi.hssf.usermodel does not exist
import org.apache.poi.hssf.usermodel.HSSFRow;
                                    ^
src/Klasa1.java:4: error: package org.apache.poi.hssf.usermodel does not exist
import org.apache.poi.hssf.usermodel.HSSFSheet;
                                    ^
src/Klasa1.java:5: error: package org.apache.poi.hssf.usermodel does not exist
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
                                    ^
4 errors

Problem wydaje mi się leży w classpath ale nie bardzo się na javie znam. Moglby ktos pomoc?

dodanie znaczników <code> - @furious programming

0

A musisz to robić ręcznie? Nie możesz tego zbudować mavenem jak człowiek? o_O
Poza tym skoro to linux to /lib/cośtam to jest ścieżka bezwzględna od roota a ty tego jara masz przecież tam w folderze obok a nie w globalnym folderze /lib

0

Buduje to jak czlowiek javac'em bo do tego służy :) Jasne, z tym libem to faktycznie moja pomyłka i poprawilem. Teraz pojawia sie blad po wpisaniu:
java [sciezka]/Main

Error: Could not find or load main class .home.mojlogin.Pulpit.projekt.src.Klasa1 (wiem co to znaczy, nie wiem czemu sie pojawil)

0

Źle podałeś ścieżkę. Pokaż jak wpisujesz bo szklana kula mi zmętniała... Poza tym bez -cp z tym libem to też nie zadziała...
A javac służy do kompilacji a nie do budowania projektów...

0

Ok dzięki za pomoc. Trzeba było w poleceniu java dodac -classpath [sciezka-do-.class] i smiga. Ciekawe czy biblioteka bedzie dzialala. na razie dzieki wielkie za pomoc. Pa

0

Ok sorry, nie jest tak fajno. Skompilowało się ale przy uruchamianiu ze stworzonym obiektem wywala błąd:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook
        at Klasa1.foo(Klasa1.java:13)
        at Main.main(Main.java:7)
Caused by: java.lang.ClassNotFoundException: org.apache.poi.hssf.usermodel.HSSFWorkbook
        at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
#!/bin/bash   
javac -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar src/*.java
java -classpath /home/mateusz/Pulpit/zpi/src/ Main
import java.io.*;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Klasa1 
{
	public void foo()
	{
		try {
			FileInputStream file = new FileInputStream( new File( "dane.xlsx" ) );
			HSSFWorkbook workbook = new HSSFWorkbook(file);

			file.close();
		} catch( Exception e ) {
                         e.printStackTrace();
		}
		

	}

}

0

Nie umiesz czytać. Nic na to nie poradzę. Przeczytaj ze zrozumieniem mój poprzedni post. W -cp musisz podać ściezki do WSZYTKICH potrzebnych plików class/jar.
Nadal nie rozumiem czemu piszesz to lodówką. Każde normalne IDE by ci to zbudowało i odpaliło bez problemów. Jak już tak kochasz konsolę to maven by ci to zbudował, ba, nawet jary by sam ściągnął...

0

Próbowałem ze wszystkimi jarami jeszcze przed napisaniem poprzedniego posta ale to nie pomogło :(. No dobra, pobrałem maven'a ale nie mam pojęcia jak się tego używa, zależało mi na czasie i prostocie, nie potrzebuję kombajnów do napisania tego programu, który i tak będę musiał potem przekompilować przez konsolę i odpalić zdalnie. Nvm. Pobrałem z repo maven'a ale co teraz?

0

Próbowałem ze wszystkimi jarami jeszcze przed napisaniem poprzedniego posta ale to nie pomogło

A jakiego użyłeś separatora do przedzielenia kolejnych elementów classpath? Na linuxie separatorem jest : a na windowsie ;

Mamy chyba inne definicje prostoty bo dla mnie prostota polega na tym że na zdalnej maszynie zrobiłbym
git clone ...
cd projekt
mvn exec:java
i by sie odpaliło ;]

0

Oba wypróbowałem ;]

#!/bin/bash   
javac -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar src/*.java
java -classpath /home/mateusz/Pulpit/zpi/src/ Main

Nadal ten sam błąd

0

Ech. Classpath jest potrzebny i do kompilacji i do uruchomienia...

0

Nie wiem, moglbys powiedziec co jest nie tak?

#!/bin/bash   
javac -classpath /home/mateusz/Pulpit/zpi/lib/ -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar src/*.java
java -classpath /home/mateusz/Pulpit/zpi/src/ -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar Main
 
0

Bo dwa razy definiujesz classpath? o_O
Przecież nawet na wikipedii masz przykład http://en.wikipedia.org/wiki/Classpath_(Java)#Setting_the_path_of_a_Jar_file

0

Robiłem tak jak jest na wiki no ale to nie działa. Robiłem to na setki sposobów

#!/bin/bash   
javac -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar src/*.java
java -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar Main
 
#!/bin/bash   
javac -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar /home/mateusz/Pulpit/zpi/src/*.java
java -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar /home/mateusz/Pulpit/zpi/src/Main
1

o_O omg. Zamiast robić to metodą prób i błędów i zrób to MYŚLĄC! Wcale nie zrobiłeś tak jak na wiki. Nie czytasz moich postów ze zrozumieniem i artykułów na wiki jak widać też nie.
Gdzie masz te skompilowane pliki class? w /home/mateusz/Pulpit/zpi/src?

cd /home/mateusz/Pulpit/zpi/src
java -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar Main

Albo

java -cp /home/mateusz/Pulpit/zpi/lib/poi/poi-examples-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-excelant-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-ooxml-schemas-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/lib/poi/poi-scratchpad-3.10.1-20140818.jar:/home/mateusz/Pulpit/zpi/src Main

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