Avatar billede ulriks Nybegynder
08. november 2004 - 15:26 Der er 11 kommentarer og
2 løsninger

class-path, manifest-filer og jar

Sikkert FAQ men google holder det som en hemmelighed så... :-)

Jeg har en lille applikation, der er pakket i en jar fil. Applikationen gør brug af en 3. parts db.driver, men af opdateringsmæssige årsager er jeg ikke interesseret i at inkludere 3.parts' jar filer i min egen jar-fil. De skal ligge i et dir, jeg kalder lib, således, at jeg har følgende struktur:
/
/lib
/minjar.jar

I min manifest.mf har skrevet: Class-Path: . ./lib/
men ved at bruge System.getProperty( "java.class.path" ) i min main, kan jeg se, at det eneste i min classpath er minjar.jar (skrive med ; istedet for [mellemrum] hjælper ikke, den fulde sti er ikke brugbar, da min app også skal køre på *nix maskiner).

Jeg har prøvet at skrive en bat-fil, hvor jeg først sætter classpathen, men det funger heller ikke.

Jeg vil gerne kunne nøjes med at tilføje et dir til classpath'en, og ikke hver enkelt 3.part jar, nogle af jar'ene navngives med versions nummer.

Tak for hjælpen
Ulrik
Avatar billede mikkelbm Nybegynder
08. november 2004 - 15:29 #1
Jeg har ikke hørt om at man kan nøjes med at angive et dir.
Hver enkelt jar-fil skal, så vidt jeg ved, angives i manifestet!
Avatar billede arne_v Ekspert
08. november 2004 - 15:31 #2
Classpaths kan kun indeholde enten dirs eller jar filer. Med et dir leder den
kun efter .class filer i det.

Du skal derfor angive alle jar filerne i manifestets Class-Path direktiv
medmindre du vil bruge en special classloader.

Langt det enmmeste ar at anbringe de eksterne jar filer i samme dir
som din jar og have:

Class-Path: a.jar b.jar c.jar

(bemærk mellemrum ikke ; eller :)

Ellers mener jeg at man skal bruge URL syntax.
Avatar billede arne_v Ekspert
08. november 2004 - 15:32 #3
URL syntax må være noget a la:

file:../lib/foobar.jar
Avatar billede ulriks Nybegynder
08. november 2004 - 15:34 #4
fuck - du har ret!
Avatar billede ulriks Nybegynder
08. november 2004 - 15:37 #5
kun et . (det er relativt til minjar.jar) men det sux jo totalt, at man skal definere de respektive jars - så ryger pointen med at have udenfor min jar lige som lidt...
Avatar billede mikkelbm Nybegynder
08. november 2004 - 15:38 #6
For det første kan du ikke have en jar i en jar.

For det andet er det jo ikke særlig meget du skal ændre, hvis du skifter dem ud. Det er kun i manifestet der skal ændres noget!
Avatar billede ulriks Nybegynder
08. november 2004 - 15:41 #7
men det er jo heller ikke fedt, at skulle pille i manifestet 'bare fordi' en andens jar-fil bliver opdateret... æv! er det eventuelt anden måde at løse problemet på?
Avatar billede mikkelbm Nybegynder
08. november 2004 - 15:43 #8
Ikke mig bekendt.

Det skal jo angives et eller andet sted, at du gør brug af disse trejde-parts ting.
Avatar billede arne_v Ekspert
08. november 2004 - 15:49 #9
1)  Jeg synes netop at det er en fordel at din jar bruger version 1.2.3 af software
    XYZ selvom version 1.2.4 ligger ved siden af. Fordi din software er jo testet
    mod 1.2.3. Hvis du tester den mod 1.2.4 så kan du jo passende opdatere
    manifestet.

2)  Software oppe i enterprise klassen vil typisk bruge sin egen classloader
    og så kan man skrive en classloader der tager alle jar filer i et bestemt
    dir. Men det er så en lidt anden kontekst.
Avatar billede ulriks Nybegynder
08. november 2004 - 15:53 #10
meget fornuftigt argument!

At skrive en classloader er måske lidt overkill :)

Tak for hjælpen
Avatar billede mikkelbm Nybegynder
13. november 2004 - 20:07 #11
Jeg tror jeg vil smide et svar - og egentlig også opfordre Arne til at gøre det :)

Så må det jo være op til 'ulriks' at vurdere om det var brugbart...
Avatar billede arne_v Ekspert
13. november 2004 - 20:11 #12
.
Avatar billede ulriks Nybegynder
14. november 2004 - 11:00 #13
Sorry - havde ingen idee om, at det var saadan det funger :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester