[Java netbeans] Distribution of jar & vm options?

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • DaOverclocker
  • Registratie: Oktober 2000
  • Laatst online: 12-09 16:43

DaOverclocker

Overclocker for life...

Topicstarter
Ik gebruik met een tijdje al met plezier netbeans IDE 6.5 voor mijn java desktop applicatie.
Nu ben ik een tijdje geleden tegen 2 dingen aangelopen, wat ik de afgelopen weken na veel zoeken nog steeds niet heb kunnen oplossen.

probleem a)
Na het builden van mijn project heb ik in een map 'dist' een jar file staan en een mapje lib. Om de jar uit te voeren heb je altijd het mapje lib nodig. Hoe krijg ik netbeans zover dat hij het altijd in 1 jar file stopt?
Oplossingen schijnen in eclipse standaard te zijn, of editten in je build.xml file. Dit heb ik geprobeerd, maar ik kreeg de build niet werkend meer.
Mijn eindgebruikers wil ik niet opzadelen met meerdere files, en ook wil ik liever geen 3th party prog gebruiken om bijv een .exe ervan te bouwen. Simple problem,complicated solution.(ie google geeft geeft geen antwoord)

probleem b)
Mijn programma heeft de parameter -Xmx1024M nodig om te kunnen draaien, anders loopt hij vast.
Nu wil ik deze parameter dus standaard meegeven aan mijn progsel. Nu zou je dat moeten kunnen instellen bij project properties ->run->VM options-> -Xmx1024M. (zie manual)
Nu werkt dat alleen niet, het programma krijgt (buiten netbeans) niet meer geheugen. Is dit een bug of doe ik zelf iets verkeerd? In een oudere versie van Netbeans heeft al wel zoiets gezeten, ergens gelezen in een bug report, maar dat was opgelost.
Nu heb ik hier een workaround voor gevonden:
code:
code:
1
2
3
4
5
6
7
8
9
    public static void main(String[] args) throws IOException {

        if (args==null || args.length==0){
            Process pb = new ProcessBuilder("java", "-Xmx1024M", "-jar", "programma.jar", "2").start();
        }
        else{
             launch(ErinBakkerDesktopApp.class, args);
        }
    }


Dit werkt wel, alleen kan ik mijn programma niet meer hernoemen, logischerwijs.
soortgelijk probleem: http://forums.netbeans.org/ptopic4630.html (oplossing nvt)

systeem specs


Acties:
  • 0 Henk 'm!

  • Fuzzillogic
  • Registratie: November 2001
  • Laatst online: 01-07 22:34
Op zich zou ik voor beide problemen ook wel een oplossing willen zien, maar eigenlijk zie ik het probleem bij probleem a niet zo..

Heb je eens aan WebStart gedacht? Daarmee wordt de distributie makkelijk, en de gebruiker heeft helemaal geen notie meer van het feit dat er meerdere libs benodigd zijn - sterker nog, dat is dan wel fijn, want bij updates hoeft er alleen maar een nieuwe versie van je eigen jar gdownload te worden.

Probleem b wordt met webstart meteen ook opgelost, aangezien je gewoon parameters voor de VM kunt opgeven.

Acties:
  • 0 Henk 'm!

  • Remus
  • Registratie: Juli 2000
  • Laatst online: 15-08-2021
DaOverclocker schreef op maandag 29 juni 2009 @ 14:55:
Ik gebruik met een tijdje al met plezier netbeans IDE 6.5 voor mijn java desktop applicatie.
Nu ben ik een tijdje geleden tegen 2 dingen aangelopen, wat ik de afgelopen weken na veel zoeken nog steeds niet heb kunnen oplossen.

probleem a)
Na het builden van mijn project heb ik in een map 'dist' een jar file staan en een mapje lib. Om de jar uit te voeren heb je altijd het mapje lib nodig. Hoe krijg ik netbeans zover dat hij het altijd in 1 jar file stopt?
Oplossingen schijnen in eclipse standaard te zijn, of editten in je build.xml file. Dit heb ik geprobeerd, maar ik kreeg de build niet werkend meer.
Mijn eindgebruikers wil ik niet opzadelen met meerdere files, en ook wil ik liever geen 3th party prog gebruiken om bijv een .exe ervan te bouwen. Simple problem,complicated solution.(ie google geeft geeft geen antwoord)
Alles in één JAR stoppen is geen goede oplossing, dat Eclipse het toelaat wil nog niet zeggen dat het een goed idee (dat is het nl niet, en soms is het gewoon in strijd met bepaalde distributievoorwaarden). Gebruik dan webstart of distribueer je applicatie met een goede installer die ook een launcher configureert (gelijk ook een oplossing voor je probleem b).
Ik heb al vaak genoeg meegemaakt dat ik extreem blij was dat mijn (vorige) werkgever de eigen applicatie gescheiden hield van de gebruikte third party libraries. Dat maakte het namelijk mogelijk om problemen te diagnosticeren door of een debug-build van third-party lib te plaatsen, of soms op te lossen door een nieuwe (of soms oude) versie van een library te gebruiken. Als er gebruik was gemaakt van één grote JAR was dat veel moeilijker geweest.

Acties:
  • 0 Henk 'm!

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

Confusion

Fallen from grace

DaOverclocker schreef op maandag 29 juni 2009 @ 14:55:
probleem b)
Mijn programma heeft de parameter -Xmx1024M nodig om te kunnen draaien, anders loopt hij vast.
Nu wil ik deze parameter dus standaard meegeven aan mijn progsel. Nu zou je dat moeten kunnen instellen bij project properties ->run->VM options-> -Xmx1024M. (zie manual)
Nu werkt dat alleen niet, het programma krijgt (buiten netbeans) niet meer geheugen. Is dit een bug of doe ik zelf iets verkeerd?
Je doet zelf iets verkeerd: je begrijpt niet goed wat er gebeurd als een applicatie gestart wordt. Netbeans doet niets anders dan wat je anders op de commandline zou doen: de -Xmx1024 aan het 'java' commando meegeven. Als je de applicatie op de commandline start moet je dus hetzelfde doen. De gebruikelijke oplossing is een wrapper scriptje.
Nu heb ik hier een workaround voor gevonden:
Gott im himmel, dat verschrikkelijke beeld krijg ik nooit meer van mijn netvlies. Een wrapper scriptje dus.

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


Acties:
  • 0 Henk 'm!

Verwijderd

Waarom zou dit zo een verschrikkelijke oplossing zijn?

Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Verwijderd schreef op maandag 29 juni 2009 @ 22:24:
Waarom zou dit zo een verschrikkelijke oplossing zijn?
Uhh, omdat je programma nooit de -X parameters te zien krijgt? Deze zijn alleen voor de VM bestemd. Dus ongeacht of er wel of niet de -X parameter wordt meegegeven, wordt er altijd een tweede process gestart.

Mijn oplossing voor het probleem zou zijn om wel een "third party app" te gebruiken voor je build process. Dit is namelijk niet de taak van je IDE. Je build process wil je namelijk ook kunnen draaien in je CI en onafhankelijk van de gebruikte IDE. Ik raad hiervoor Maven 2 aan, ook zijn er genoeg mensen die hiervoor Ant aan raden. Ik vind Maven 2 eigenlijk de vervanger van Ant, maar daar is niet iedereen het mee eens.

[ Voor 36% gewijzigd door Nick_S op 29-06-2009 22:41 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

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

Confusion

Fallen from grace

Verwijderd schreef op maandag 29 juni 2009 @ 22:24:
Waarom zou dit zo een verschrikkelijke oplossing zijn?
Nouja, als dit stuk Java je wrapper script is, dan valt het nog mee, maar het is een stuk onduidelijker dan een .bat of .sh file waarin gewoon
code:
1
java -Xmx1024m -jar $jar

wordt gedaan.

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


Acties:
  • 0 Henk 'm!

  • DaOverclocker
  • Registratie: Oktober 2000
  • Laatst online: 12-09 16:43

DaOverclocker

Overclocker for life...

Topicstarter
Confusion schreef op maandag 29 juni 2009 @ 21:20:
Netbeans doet niets anders dan wat je anders op de commandline zou doen: de -Xmx1024 aan het 'java' commando meegeven. Als je de applicatie op de commandline start moet je dus hetzelfde doen. De gebruikelijke oplossing is een wrapper scriptje.
Als ik het script via de commandline start met de optie -xmx1014m, dan werkt het programma wel. De optie in het programma helpt echter niet.

Een bat of een sh file kan ook wel, maar dan nog kan ik mijn jar niet meer hernoemen, dan werkt de snelkoppeling niet meer. Verder mag de gerbruiker dan niet meer de jar aanklikken, maar perse de bat, anders werkt het programma niet goed. Dat gaat nooit goed werken voor onervaren gebruikers.

Dat maven2 is misschien een optie, zal er eens naar kijken.

[ Voor 26% gewijzigd door DaOverclocker op 30-06-2009 08:18 ]

systeem specs


Acties:
  • 0 Henk 'm!

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

Confusion

Fallen from grace

DaOverclocker schreef op dinsdag 30 juni 2009 @ 07:58:
Een bat of een sh file kan ook wel, maar dan nog kan ik mijn jar niet meer hernoemen
Ik weet niet hoe vaak jij je jar wilt hernoemen, maar bij mij is het antwoord: vrijwel nooit en die namen synchroon houden is dan geen zorg. Gebruikers hernoemen sowieso geen jars en als ze het wel doen, dan weten ze hopelijk waar ze mee bezig zijn.
Verder mag de gerbruiker dan niet meer de jar aanklikken
Je kan ook zorgen dat er geen Main-Class in het manifest gedefinieerd staat. Dan moet je de main class expliciet na de -jar $jar opgeven en werkt klikken op de jar sowieso helemaal niet.

Overigens, weet je zeker dat je zoveel geheugen nodig hebt? Zelfs forse applicaties als Netbeans zelf hebben dat niet nodig.

[ Voor 10% gewijzigd door Confusion op 30-06-2009 09:08 ]

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


Acties:
  • 0 Henk 'm!

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 10-08 02:59

Gerco

Professional Newbie

DaOverclocker schreef op dinsdag 30 juni 2009 @ 07:58:
Een bat of een sh file kan ook wel, maar dan nog kan ik mijn jar niet meer hernoemen, dan werkt de snelkoppeling niet meer. Verder mag de gerbruiker dan niet meer de jar aanklikken, maar perse de bat, anders werkt het programma niet goed. Dat gaat nooit goed werken voor onervaren gebruikers.
Onervaren gebruikers moet je ook gewoon een shortcut (snelkoppeling) geven. Daar kun je gewoon de hele commandline in zitten en het enige wat ze zien is een icoontje in het start menu.

Die snelkoppeling laat je gewoon door je installer aanmaken en de gebruiker hoeft niet eens te weten dat er een jar achter zit. De meeste gebruikers weten namelijk ook niet wat een .exe is en dat is meestal ook helemaal niet nodig.
Dat maven2 is misschien een optie, zal er eens naar kijken.
Maven2 is een build-tool, geen installer of deployment tool. Hier ga je dus weinig aan hebben als ik goed begrijp wat je nodig hebt.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Gerco schreef op dinsdag 30 juni 2009 @ 09:41:
[...]
Maven2 is een build-tool, geen installer of deployment tool. Hier ga je dus weinig aan hebben als ik goed begrijp wat je nodig hebt.
Maven 2 is inderdaad een build tool, welke dus ook je distributies kan builden. Kijk eens naar de Application Assembler Maven Plugin. Deze maakt een distributie layout voor een standalone applicatie inclusief opstartscripts voor zowel Windows als *nix.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'

Pagina: 1