[Eclipse]Externe Libaries ontbreken na compileren in Eclipse

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zie titel: Externe Libaries ontbreken na compileren in Eclypse.

Ik gebruik Eclipse om mijn Java projecten in te programmeren, beheren, compileren en testen (in applet viewer bv.)

Zo is het in Eclipse mogelijk om externe libaries toe te voegen aan een project classpath. Deze werken iedere keer wanneer ik ze in de applet viewer uitvoer. Wanneer ik het project exporteer naar een .JAR file, lijken deze hierin te ontbreken.

Wanneer ik hem run vanuit de browser, krijg ik een ClassNotFoundExceptation.

Iemand enig idee hoe ik dit kan oplossen?

BVD Jan

Acties:
  • 0 Henk 'm!

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 17:15
Misschien niet de meest chique maar wel de makkelijkste methode lijkt mij Fatjar (plugin voor eclipse). Hiermee kan je exporteren naar een jar met alle benodigde libraries er in.
linkje

[ Voor 11% gewijzigd door denyos op 29-09-2008 07:24 ]

Strava


Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Je kan ook bij het uitvoeren van de door jou aangemaakte jarfile nog een classpath opgeven waar de libraries te vinden zijn, dat zou ook prima moeten werken. En lijkt me ook de beste oplossing, zou houdt je de externe libraries gescheiden van je eigen code.

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ten eerste is dit geen java, maar een eclipse probleem. Vandaar de move naar DTE en de topictitel aanpassing.


Over je probleem. Ik durf er niet veel over te zeggen. Mijn deliverables genereer ik over het algemeen met mijn eigen ant scripts. Wat je eventueel nog zou kunnen proberen is in het "Java Build Path" scherm op de tab "Order and Export" kijken wat er gebeurt als je de checkboxes aanvinkt.

Oplossingen als FatJar vind ik persoonlijk erg smerig. Naast dat dat vaak niet helemaal toegestaan is volgens licenties van bepaalde libraries kun je ook nog problemen krijgen doordat de meta-inf van de libs verloren gaan.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Verwijderd schreef op maandag 29 september 2008 @ 02:30:
Wanneer ik het project exporteer naar een .JAR file, lijken deze hierin te ontbreken.
Dat hoort ook zo.
Wanneer ik hem run vanuit de browser, krijg ik een ClassNotFoundExceptation.

Iemand enig idee hoe ik dit kan oplossen?
Hier beginnen met lezen: http://java.sun.com/docs/books/tutorial/deployment/jar/, dan kom je het vanzelf tegen.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Even voor de volledigheid van het topic, de oplossing staat zover ik kan beoordelen onder deze link:
http://java.sun.com/docs/...ployment/jar/downman.html

Zodra ik vanavond thuis ben, ga ik het direct proberen. Bedankt iedereen!
Groeten,
Jan

Acties:
  • 0 Henk 'm!

  • Apache
  • Registratie: Juli 2000
  • Laatst online: 16-09 10:29

Apache

amateur software devver

Janoz schreef op maandag 29 september 2008 @ 09:23:
Ten eerste is dit geen java, maar een eclipse probleem. Vandaar de move naar DTE en de topictitel aanpassing.

...
Hoezo een eclipse probleem?

Dit is een probleem tussen de computer en de stoel.

Eclipse bouwt jouw applicatie naar een jar maar voor je dependencies zorg je standaard zelf. Klopt dat je dit managed in een serieuze omgeving met ant of beter nog maven (in sommige gevallen ;)) maar die externe libraries zouden "ontbreken" in elke tool, dit zijn java basics en heeft imo niets met de IDE te maken.

If it ain't broken it doesn't have enough features


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Janoz schreef op maandag 29 september 2008 @ 09:23:
Naast dat dat vaak niet helemaal toegestaan is volgens licenties van bepaalde libraries kun je ook nog problemen krijgen doordat de meta-inf van de libs verloren gaan.
Dat is precies wat Eclipse in een waarschuwingsschermpje roept als je 'export as runnable jar', oftewel de fat-jar optie, aanklikt :).

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Overigens is hiermee het probleem vastgesteld, maar nog niet geheel opgelost.

Ik heb nu in Eclipse de references aangepast en ik kan hoog en laag springen, maar hij doet het gewoon niet. Zo heb ik (nadat ik het eerst op de nette manier heb geprobeerd, .classpath aanpassen of werken met class path variables in eclipse) er nu voor gezorgd dat de referenties absoluut staan ingesteld op de locatie waar ze vandaan worden gehaald. C:/wamp/www/dtm/classes/ <jarfiles>.

Toch krijg ik iedere keer wanneer ik deze wil runnen (vanuit een simpele html file zelfs, zie code) een class not found error. Zie ik hier nog wat over het hoofd?
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>

<head><title>Titel</title></head>

<body>

<applet archive="dtm.jar" width="300" height="200" code="applet.Uploader.class">
    <param name="pId" value="1">
</applet>

</body>

</html>


BVD Jan

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

Verwijderd schreef op dinsdag 30 september 2008 @ 20:17:
Zie ik hier nog wat over het hoofd?
Ja. Je ziet het verschil niet tussen applicatie runnen binnen een managed omgeving (eclipse) en daarbuiten.

Leer eerst eens een console applicatie maken, en die te draaien buiten eclipse, doe dat dan nog een keer maar dan met externe librairies zodat je leert hoe een classpath werkt, en kijk daarna nog eens naar applets enzo ;)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Apache schreef op maandag 29 september 2008 @ 12:36:
Hoezo een eclipse probleem?

Dit is een probleem tussen de computer en de stoel.

Eclipse bouwt jouw applicatie naar een jar maar voor je dependencies zorg je standaard zelf. Klopt dat je dit managed in een serieuze omgeving met ant of beter nog maven (in sommige gevallen ;)) maar die externe libraries zouden "ontbreken" in elke tool, dit zijn java basics en heeft imo niets met de IDE te maken.
Goed, het een 'eclipse probleem' noemen was wat kort door de bocht, maar ik neem aan dat je het wel met me eens ben dat dit probleem dichter ligt bij "Hoe ga ik goed om met mijn ontwikkel omgeving waarin ik op dit moment voornamelijk Eclipse gebruik" dan bij "Ik heb een java programmeer (dus niet java platform) probleem".

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
momania schreef op dinsdag 30 september 2008 @ 20:22:
[...]

Ja. Je ziet het verschil niet tussen applicatie runnen binnen een managed omgeving (eclipse) en daarbuiten.

Leer eerst eens een console applicatie maken, en die te draaien buiten eclipse, doe dat dan nog een keer maar dan met externe librairies zodat je leert hoe een classpath werkt, en kijk daarna nog eens naar applets enzo ;)
Heel gevat.

Maar dit is dus inderdaad een van de eerste keren dat ik verantwoordelijk ben voor het exporteren van het project, omdat ik, jawel, in een eenmansgroep werk.
Eclipse heeft in zijn classpath een aantal JARS staan, die op het moment (absoluut) staan weergegeven. De door mij geëxporteerde JAR heeft een .classpath file in zich die ook hiernaar verwijst. De locatie waar ze naar verwijzen bestaat gewoon, dus in mijn ogen zou het logisch zijn als hij deze gewoon kan aanroepen, of dit nu vanuit eclipse gebeurt of niet. (Overigens staan deze classen in een submap van de map waar mijn JAR in staat, maar het lijkt me niet dat dat veel uit maakt.)

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 15:37

momania

iPhone 30! Bam!

Je aanname is dat de .classpath file alles voor je regelt. Daar ga je de mist in want dat is een eclipse specifieke file ;)

Classpath beschrijven voor standalone apps doe je of via een jvm parameter, of in de META-INF van je main jar. :)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Wat momania zegt dus: probeer eerst de applicatie eens aan de gang te krijgen zonder Eclipse. Zie bijvoorbeeld http://java.sun.com/j2se/...cs/solaris/classpath.html (vervang eventueel 'solaris' door 'windows'). Dan weet je daarna ook wat er niet klopt aan het product dat Eclipse voor je bouwt en kan je het bouwproces daar op aanpassen.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik weet niet of het aan mij ligt, maar er doen zich nog steeds problemen voor.
Immidels "Jar" ik alle files via de command line, en dit gaat prima, wanneer ik de volgende regel gebruik. Let op, hier zit nog geen manifest file bij, dus zodra ik dit applet wil runnen, krijg ik nog steeds dezelfde error als voorheen.
code:
1
jar cf my_unsigned.jar applet downloadManager extra uploadManager


Nu verander ik mijn code dus in hetvolgende:
code:
1
jar cfm my_unsigned.jar manifest.txt applet downloadManager extra uploadManager

met een standaard manifest.txt in dezelfde map
code:
1
Class-Path: C:\wamp\www\DTMJ\web\classes\mysql.jar C:\wamp\www\DTMJ\web\classes\httpclient.jar C:\wamp\www\DTMJ\web\classes\codec.jar C:\wamp\www\DTMJ\web\classes\logging.jar


Wanneer ik deze pplet onderteken en run, krijgt het probleem een hele andere vorm. De class die ik aanroep vanuit mijn html (applet.Uploader.class) kan hij niet eens meer vinden.

Zie ik nog steeds wat over het hoofd of is dit gewoon raar?

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Vergeten om in de html .jar achter de naam van de jar te zetten?

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Confusion schreef op vrijdag 03 oktober 2008 @ 07:34:
Vergeten om in de html .jar achter de naam van de jar te zetten?
Nope. Dat zou betekenen dat hij het ook niet zou doen wanneer ik de output van mijn eerste compile actie zou uitproberen (de ene zonder de manifest.) Op het moment dat ik manifest erbij stop, veranderd er iets (of wordt er iets niet ingesteld wat normaal gesproken wel het geval is) waardoor hij mijn klassen niet meer kan vinden, op de manier waarop ik ze normaal gesproken aanroep. (code={packages}.{filenaam} )

Acties:
  • 0 Henk 'm!

  • Confusion
  • Registratie: April 2001
  • Laatst online: 01-03-2024

Confusion

Fallen from grace

Twee dingen die het ook kunnen zijn:
1) Ik dacht dat Class-Path entries altijd relatieve paden moesten zijn
2) Controleer of je inderdaad backslashes moet gebruiken onder Windows, of dat de Class-Path entries altijd met forward slashes horen te worden aangegeven.

Wie trösten wir uns, die Mörder aller Mörder?


Acties:
  • 0 Henk 'm!

Verwijderd

Wat staat er bij: project properties > Java Build Path -> Order en export?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Confusion schreef op vrijdag 03 oktober 2008 @ 08:34:
Twee dingen die het ook kunnen zijn:
1) Ik dacht dat Class-Path entries altijd relatieve paden moesten zijn
2) Controleer of je inderdaad backslashes moet gebruiken onder Windows, of dat de Class-Path entries altijd met forward slashes horen te worden aangegeven.
Excuses, had ik niet vermeld, maar beide zijn al het geval in een immidels nieuwe manifest.txt:
code:
1
Class-Path: classes/commons-codec-1.2.jar, classes/commons-httpclient-3.1.jar, classes/commons-logging-1.1.1.jar, classes/mysql-connector-java-3.0.17-ga-bin.jar
mserver schreef op vrijdag 03 oktober 2008 @ 08:34:
Wat staat er bij: project properties > Java Build Path -> Order en export?
Bovenaan staat mijn source, daarna de JRE System libaries, en daarna mijn klassen achtereenvolgens (mysql.jar, logging.jar, httpclient.jar en codec.jar)

Nog even de error stacktrace wanneer ik mijn klasse vanuit de JAR probeer te openen (nieuwe jar, alle classes staan nu voor het gemak in de default package):

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Java(TM) Plug-in: Version 1.4.2_18
Using JRE version 1.4.2_18 Java HotSpot(TM) Client VM
User home directory = C:\Documents and Settings\Jan

Proxy Configuration: Browser Proxy Configuration


----------------------------------------------------
c: clear console window
f: finalize objects on finalization queue
g: garbage collect
h: display this help message
l: dump classloader list
m: print memory usage
o: trigger logging
p: reload proxy configuration
q: hide console
r: reload policy configuration
s: dump system properties
t: dump thread list
v: dump thread stack
x: clear classloader cache
0-5: set trace level to <n>
----------------------------------------------------
load: class Uploader.class not found.

java.lang.ClassNotFoundException: Uploader.class

at sun.applet.AppletClassLoader.findClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.applet.AppletClassLoader.loadClass(Unknown Source)

at java.lang.ClassLoader.loadClass(Unknown Source)

at sun.applet.AppletClassLoader.loadCode(Unknown Source)

at sun.applet.AppletPanel.createApplet(Unknown Source)

at sun.plugin.AppletViewer.createApplet(Unknown Source)

at sun.applet.AppletPanel.runLoader(Unknown Source)

at sun.applet.AppletPanel.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)


(ik zie nergens de optie om mijn vorige bericht te wijzigen, dus moet het maar hier)
Pagina: 1