odpalanie z konsoli + zewn libs

0

hej, mam nastepujacy problem. Mam programik ktory ma byc odpalany z konsoli. Program ten korzysta jednak z zewn biblioteki (log4j). i jak probuje odpalic z konsoli to dostaje:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger

do projektu normalnie mam dolaczana te biblioteke. jak program odpalam z netbeans to jest ok. probowalam kopiowac tego jara do katalogu dist a pozniej do build, ale nadal przy odpalaniu z konsoli jest ten problem. Uzywam u siebie linuxa (fedora) i w pliku .bahrc dodalam classpath:

User specific aliases and functions

CLASSPATH=$CLASSPATH:/home/misty/Dokumenty/libs/java/libs

w tym katalogu mam m.in. jara do log4j. ale i to nie pomoglo. ewidentnie on po prostu nie widzi log4j. jak moge sobie z tym poradzic? czy ktos z Was moglby mi pomoc?

     pzdr,
                misty

w sumie w pliku MANIFEST tez widzi tego log4j:

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 14.0-b16 (Sun Microsystems Inc.)
Class-Path: lib/log4j-1.2.16.jar lib/activation-1.1.jar lib/axiom-api-
 1.2.8.jar lib/axiom-dom-1.2.8.jar lib/axiom-impl-1.2.8.jar lib/axis2-
 adb-1.5.1.jar lib/axis2-adb-codegen-1.5.1.jar lib/axis2-ant-plugin-1.
 5.1.jar lib/axis2-clustering-1.5.1.jar lib/axis2-codegen-1.5.1.jar li
 b/axis2-corba-1.5.1.jar lib/axis2-fastinfoset-1.5.1.jar lib/axis2-jav
 a2wsdl-1.5.1.jar lib/axis2-jaxbri-1.5.1.jar lib/axis2-jaxws-1.5.1.jar
  lib/axis2-jibx-1.5.1.jar lib/axis2-json-1.5.1.jar lib/axis2-kernel-1
 .5.1.jar lib/axis2-metadata-1.5.1.jar lib/axis2-mtompolicy-1.5.1.jar 
 lib/axis2-saaj-1.5.1.jar lib/axis2-spring-1.5.1.jar lib/axis2-transpo
 rt-http-1.5.1.jar lib/axis2-transport-local-1.5.1.jar lib/axis2-xmlbe
 ans-1.5.1.jar lib/bcel-5.1.jar lib/commons-codec-1.3.jar lib/commons-
 fileupload-1.2.jar lib/commons-httpclient-3.1.jar lib/commons-io-1.4.
 jar lib/commons-lang-2.3.jar lib/commons-logging-1.1.1.jar lib/geroni
 mo-annotation_1.0_spec-1.1.jar lib/geronimo-jaxws_2.1_spec-1.0.jar li
 b/geronimo-saaj_1.3_spec-1.0.1.jar lib/geronimo-stax-api_1.0_spec-1.0
 .1.jar lib/geronimo-ws-metadata_2.0_spec-1.1.2.jar lib/httpcore-4.0.j
 ar lib/jalopy-1.5rc3.jar lib/jaxb-api-2.1.jar lib/jaxb-impl-2.1.7.jar
  lib/jaxb-xjc-2.1.7.jar lib/jaxen-1.1.1.jar lib/jettison-1.0-RC2.jar 
 lib/jibx-bind-1.2.1.jar lib/jibx-run-1.2.1.jar lib/log4j-1.2.15.jar l
 ib/mail-1.4.jar lib/mex-1.5.1.jar lib/neethi-2.0.4.jar lib/smack-3.0.
 4.jar lib/smackx-3.0.4.jar lib/soapmonitor-1.5.1.jar lib/woden-api-1.
 0M8.jar lib/woden-impl-dom-1.0M8.jar lib/wsdl4j-1.6.2.jar lib/wstx-as
 l-3.2.4.jar lib/xalan-2.7.0.jar lib/xercesImpl-2.6.2.jar lib/xml-apis
 -1.3.02.jar lib/xml-resolver-1.2.jar lib/xmlbeans-2.3.0.jar lib/XmlSc
 hema-1.4.3.jar lib/postgresql-8.4-701.jdbc3.jar
0

pliki jar powinny znajdować się w katalogu lib, który to katalog powinien być w głównym katalogu aplikacji:

app/
    |-lib/
    |    |-log4j-1.2.16.jar
    |-pl/
    |   |-App.class

I teraz:

$ cd  app
$ java pl.App

to w manifeście masz wpisane lib/log4j-1.2.16.jar i to powinno zadziałać.

ps. używaj edycji postów :)

0

u mnie jest taka struktura (netbeansowa):
\src
\dist
\build

w build znaduja sie:
MojProjekt.jar oraz katalog lib w ktorym wlasnie sa jary (w tym log4j.jar). Skopiowalam katalog lib do glownego katalogu aplikacji, wiec mam:

\src
\dist
\build
\lib
i nadal to samo :/

co wiecej, jak probuje odpalic jara:

java -jar MojProjekt.jar sciezka1 sciezka2
Failed to load Main-Class manifest attribute from
MojProjekt.jar

czemu? :(

0

Nie widzę deklaracji Main-Class w manifeście.

0

dobra to drugie pewnie bo mam kilka klas main. ale ta pierwsza czesc-utworzylam katalog lib, wrzucilam tam biblioteki, skompilowalam i nadal jak probuje odpalic program z konsoli to nie widzi log4j!

czekaj, bo ja juz nie rozumiem. to ja mam jednak edytowac ten plik MANIFEST? czy skoro teraz mam katalog lib a w nim log4j to sam powinien sobie widziec? (ale nie widzi)

0

a plik manifest gdzie siedzi?

0
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 14.0-b16 (Sun Microsystems Inc.)
Class-Path: lib/log4j-1.2.16.jar 
 lib/activation-1.1.jar
 lib/axiom-api-1.2.8.jar
 lib/axiom-dom-1.2.8.jar 
 lib/axiom-impl-1.2.8.jar
 lib/axis2-adb-1.5.1.jar 
 lib/axis2-adb-codegen-1.5.1.jar 
 lib/axis2-ant-plugin-1.5.1.jar 
 lib/axis2-clustering-1.5.1.jar
 lib/axis2-codegen-1.5.1.jar 
 lib/axis2-corba-1.5.1.jar
 lib/axis2-fastinfoset-1.5.1.jar 
 lib/axis2-java2wsdl-1.5.1.jar
 lib/axis2-jaxbri-1.5.1.jar 
 lib/axis2-jaxws-1.5.1.jar
 lib/axis2-jibx-1.5.1.jar 
 lib/axis2-json-1.5.1.jar
 lib/axis2-kernel-1.5.1.jar 
 lib/axis2-metadata-1.5.1.jar
 lib/axis2-mtompolicy-1.5.1.jar
 lib/axis2-saaj-1.5.1.jar
 lib/axis2-spring-1.5.1.jar
 lib/axis2-transport-http-1.5.1.jar
 lib/axis2-transport-local-1.5.1.jar
 lib/axis2-xmlbeans-1.5.1.jar
 lib/bcel-5.1.jar
 lib/commons-codec-1.3.jar
 lib/commons-fileupload-1.2.jar
 lib/commons-httpclient-3.1.jar
 lib/commons-io-1.4.jar
 lib/commons-lang-2.3.jar
 lib/commons-logging-1.1.1.jar
 lib/geronimo-annotation_1.0_spec-1.1.jar
 lib/geronimo-jaxws_2.1_spec-1.0.jar
 lib/geronimo-saaj_1.3_spec-1.0.1.jar
 lib/geronimo-stax-api_1.0_spec-1.0.1.jar
 lib/geronimo-ws-metadata_2.0_spec-1.1.2.jar
 lib/httpcore-4.0.jar
 lib/jalopy-1.5rc3.jar
 lib/jaxb-api-2.1.jar
 lib/jaxb-impl-2.1.7.jar
 lib/jaxb-xjc-2.1.7.jar
 lib/jaxen-1.1.1.jar
 lib/jettison-1.0-RC2.jar
 lib/jibx-bind-1.2.1.jar
 lib/jibx-run-1.2.1.jar
 lib/log4j-1.2.15.jar
 lib/mail-1.4.jar
 lib/mex-1.5.1.jar
 lib/neethi-2.0.4.jar
 lib/smack-3.0.4.jar
 lib/smackx-3.0.4.jar
 lib/soapmonitor-1.5.1.jar
 lib/woden-api-1.0M8.jar
 lib/woden-impl-dom-1.0M8.jar
 lib/wsdl4j-1.6.2.jar
 lib/wstx-asl-3.2.4.jar
 lib/xalan-2.7.0.jar
 lib/xercesImpl-2.6.2.jar
 lib/xml-apis-1.3.02.jar
 lib/xml-resolver-1.2.jar
 lib/xmlbeans-2.3.0.jar
 lib/XmlSchema-1.4.3.jar
 lib/postgresql-8.4-701.jdbc3.jar

poprawiony manifest. Dopisz jeszcze tylko Main-Class.

0

no w jarze..

jest tak: mam sobie projekt MojProjekt. w nim rozne pakiety, klasy itd. i rowniez kilka klas main.
ja chce odpalic jedna z nich (niech sie nazywa B). Klasa B korzysta z zewn biblioteki (z log4j)
probowalam odpalac poprzez:

java nazwa.paczki.B param1 param2

ale dostaje blad ze nie znajduje log4j. utworzylam katalog lib w katalogu projektu, skompilowalam, ale problem nadal jest taki sam.

Koziołek, ale przeciez MANIFEST sie sam tworzy przy kompilacji. to ja mam go po kompilacji za kazdym razem recznie edytowac?
poza tym to co podales to taki sam MANIFEST co mi sie generuje.. i w sumie zauwazylam ze jak recznie dodalam do projektu katalog lib, a w nim biblioteke to log4j, to teraz w MANIFESCIE mam ja 2 razy.

to jak to w koncu ma byc? :(

probowalam edytowac recznie ale sie nie da. tzn w netbeans to w ogole nie znalazlam mozliwosci edycji pliku manifest. ustawilam te swoja klase jako main, ale po kompilacji w manifescie nadal nie jest ustawiona klasa main

0

rozpakowalam wiec tego jara i edytowalam recznie MANIFEST i potem znow spakowalam do jara. to dostaje ze invalid or corrupt jarfile. czy to jest na prawde tak skomplikowane ze nie da sie tego zrobic w pare min?://

0

Jak wywolujesz z lini polecen za pomoca java (ale bez -jar) to musisz podac classpath. Robisz to albo za pomoca switcha -cp albo tak jak zrobilas wczesniej, definiujesz zmienna CLASSPATH. Co zrobilas dobrze.
Teraz co zle: wpisy z classpath nie wskazuja na katalog z jarami, wskazuja na katalog z klasami lub na jary. Zatem, twoj classpath powinien wygladac mniej wiecej tak:
-cp .:/home/misty/Dokumenty/libs/java/libs/log4j.jar:/home/misty/Dokumenty/libs/java/libs/activation.jar
itp (uzylem prostych nazw jarow, bez wersji, ale bedziesz wiedziec o co chodzi.). Zwroc uwage na separator cp, znak ':' (liux). ustawienie cp rowniez nadpisuje domyslny (aktualny katalog) dlatego na pierwszym miejscu umiescilem . - po to aby java mogla znalezc klasy programu.
Zdaje sie ze wprowadzili to w javie 6, wiec jesli jej uzywasz, to mozesz uzyc tzw wildcards w cp:
-cp .:/home/misty/Dokumenty/libs/java/libs/*
czyli (poza aktyalnym katalogiem) wszystko co znajduje sie w libs - czyli to co chcialas na poczatku. Jednak moze sie zdarzyc ze w tym katalogu jest wiecej jarow niz wymaga aplikacja, ja wole jawne ustalanie cp.

Co do manifestu w netbeans - gdziestam w ustawieniach projektu masz opcje zeby dla danej konfiguracji wybrac glowna klase, i wtedy nb doda to do manifestu.

Do koziolka: jesli masz Class-Path w manifescie, to jest on uzywany tylko gdy wolasz java -jar, nie gdy jawnie uruchamiassz klase z tego jara.

0

wiecie co.. ale nedza! utworzylam w netbeans projekt typu 'Java Class Library'. i to wszystko psulo. ja w netbeansie ustawialam te klase glowna, ale po kompilacji on jej nie kumal. teraz zrobilam sobie szybko projekt testowy, typu standard i w ogole nic nie musze ustawiac. sam mi tworzy katalog lib, a w nim daje jary (czyli moj log4j), uruchamiam z konsoli i jest ok.
nie rozumiem totalnie dlaczego w przypadku 'Java Class Library" sie tak kaszani. i czemu nawet klasy main nie widzi, nawet jak mu recznie podam. nedzne to. ale moze taka jest specyfika 'Java Class Library', a ja po prostu nie przemyslalam wszystkiego od poczatku.

wielkie dzieki za Wasza pomoc i wszystkie sugestie!
pzdr,
misty

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