Innholdsoversikt for programutvikling

Distribuering av javaprogrammer

Vi vet at et større javaprogram består av mange filer. Det som behøves for å kjøre programmet, er class-filene, samt eventuelle tilhørende bildefiler, lydfiler, etc. Men dersom vi skal distribuere dette til en som skal kunne kjøre programmet, er det ønskelig at alt kan leveres i form av én enkelt kjørbar fil. Det som har vært tradisjonelt for programmer, er å få dem i form av en såkalt exe-fil. Men problemet er at en slik exe-fil vil være tilpasset ett spesielt operativsystem og ikke vil la seg kjøre på et annet operativsystem. Det som fra starten av har vært grunntanken bak Java, er at den samme koden skulle la seg kjøre på alle mulige plattformer, så sant som Javas kjøresystem (jre-pakken) var installert. Dette opplegget lar seg ikke realisere med tradisjonelle exe-filer. Derfor måtte man finne på noe annet. Det som ble funnet på, var det som kalles jar-filer: Java Archive files.

JAR-filer

JAR-filer er komprimerte filer der det brukes samme komprimeringsformat som i zip-filer. Jar-filer kan inneholde både class-filer, java-filer og andre filtyper, slik som bildefiler og lydfiler. Standardinstallasjonen for Java (jdk-pakken) inneholder et verktøy for å generere jar-filer. Det er jar-programmet (jar.exe) som befinner seg i jdk/bin-katalogen. Det kan kjøres på konsollnivå. Sammen med selve jar-kommandoen må det da angis en del opsjoner og filnavn. Dersom man ønsker å gå fram på denne måten, kan man finne nærmere beskrivelse av framgangsmåten for eksempel i The Java Tutorials: Packaging Programs in JAR Files. I programutviklingsverktøy slik som Eclipse og NetBeans er det bygget inn verktøy for generering av jar-filer. Disse bruker selvsagt i sin tur de underliggende verktøyene fra jdk-pakken. Nedenfor er det forklart nettopp hvordan man kan generere jar-filer i Eclipse og i NetBeans. I studentsammenheng er det aktuelt å generere jar-filer i forbindelse med innlevering av obligatoriske oppgaver og prosjektarbeid. Det vi da ønsker å generere, er vanligvis en kjørbar jar-fil, det vil si som virker på tilsvarende måte som en exe-fil.

Generere jar-filer i Eclipse

Merknad Beskrivelsen nedenfor er testet for Eclipse 3.4.0 og javaversjon 1.6. Den er foreløpig ikke testet for nyere versjoner av Eclipse og Java.

Vi skal se nærmere på hvordan man kan generere kjørbare jar-filer i Eclipse. Veiledning for dette kan man finne i under Help-menyen til Eclipse. Nedenfor er det gjengitt noe av det som finnes der. De første skrittene av framgangsmåten er beskrevet i følgende punkter, som finnes under
Java Development User Guide > Tasks > Creating JAR Files:

Creating a New JAR File

To create a new JAR file in the workbench:

  1. In the Package Explorer, you can optionally pre-select one or more Java elements to export. (These will be automatically selected in the JAR Package Specification wizard page, described in Step 4.)
  2. Either from the context menu or from the menu bar's File menu, select Export.
  3. Expand the Java node and select JAR file. Click Next.
  4. In the JAR File Specification page, select the resources that you want to export in the Select the resources to export field.
  5. Select the appropriate checkbox to specify whether you want to Export generated class files and resources or Export Java source files and resources. Note: Selected resources are exported in both cases.
  6. In the Select the export destination field, either type or click Browse to select a location for the JAR file.
  7. Select or clear the Compress the contents of the JAR file checkbox.
  8. Select or clear the Overwrite existing files without warning checkbox. If you clear this checkbox, then you will be prompted to confirm the replacement of each file that will be overwritten.
  9. Note: The overwrite option is applied when writing the JAR file, the JAR description, and the manifest file.
  10. You have two options:

Gå fram slik det er beskrevet i punktene ovenfor. Men i punkt 3, så velg JAR File istedenfor Runnable JAR File. Velger du det siste, så vil du vanligvis i jar-fila få med en god del mer enn det som er nødvendig. Ved innlevering av oppgaver og prosjektoppgaver her på skolen, skal du levere java-filene i tillegg til class-filene som er nødvendig for å få en kjørbar jar-fil. For å oppnå dette, må du under punkt 5 krysse av både for Export generated class files and resources og for Export Java source files and resources. For øvrig må du under punkt 6 velge hvor du vil plassere den jar-fil som blir generert og hva den skal hete. Som etternavn (file extension) må du bruke .jar. For øvrig er det for jar-filer vanlig å bruke bare små bokstaver i filnavnet.

Under punkt 10 skal du nå ikke velge
Finish to create the JAR file immediately,
men isteden velge
Next to use the JAR Packaging Options page to set advanced options, create a JAR description, or change the default manifest.

Veiledningen for det vinduet du da får opp er som følger:

Setting Advanced Options

  1. Follow the procedure for creating a JAR file, but click Next in the last step to go to the JAR Packaging Options page.
  2. If you want to save the JAR file description, select the Save the description of this JAR in the workspace checkbox. A JAR file description can be used to regenerate a JAR file without using the wizard.
  3. The compiler is able to generate CLASS files even when source contains errors. You have the option to exclude CLASS (but not source) files with compile errors. These files will be reported at the end, if reporting is enabled.
  4. You can choose to exclude CLASS (but not source) files that have compile warnings. These files will be reported at the end.
    Note: This option does not automatically exclude class files with compile errors.
  5. You can choose to include the source folder path by selecting the Create source folder structure checkbox.
  6. Select the Build projects if not built automatically checkbox if you want the export to perform a build before creating the JAR file.
  7. Click Finish to create the JAR file immediately or Next if you want to change the default manifest.

Du trenger vanligvis ikke å gjøre noe annet i dette vinduet enn at du under punkt 7 på lista ovenfor velger Next. (Du skal altså ikke velge Finish.) Til det nye vinduet du får opp har vi følgende veiledning:

Defining the JAR File's Manifest

You can either define the important parts of the JAR file manifest directly in the wizard or choose to use a manifest file that already exists in your workbench.

Creating a new manifest

  1. Follow the procedure for creating a JAR file, but click Next in the last step to go to the JAR Packaging Options page.
  2. Set any advanced options that you want to set, and then click Next again to go to the JAR Manifest Specification page.
  3. If it is not already selected, click the Generate the manifest file button.
  4. You can now choose to save the manifest in the workbench. This will save the manifest for later use. Click Save the manifest in the workspace, then click Browse next to the Manifest file field to specify a path and file name for the manifest.
  5. If you decided to save the manifest file in the previous step and you chose to save the JAR description on the previous wizard page, then you can choose to reuse it in the JAR description (by selecting the Reuse and save the manifest in the workspace checkbox). This means that the saved file will be used when the JAR file is recreated from the JAR description.This option is useful if you want to modify or replace the manifest file before recreating the JAR file from the description.
  6. You can choose to seal the JAR and optionally exclude some packages from being sealed or specify a list with sealed packages. By default, nothing is sealed.
  7. Click the Browse button next to the Main class field to specify the entry point for your applications.
    Note: If your class is not in the list, then you forgot to select it at the beginning.
  8. Click Finish. This will create the JAR, and optionally a JAR description and a manifest file.

Using an existing manifest

You can use an existing manifest file that already exists in your workbench.

  1. Follow the procedure for creating a JAR file, but click Next in the last step to go to the JAR Packaging Options page.
  2. Set any advanced options that you want to set, and the click Next again to go to the JAR Manifest Specification page.
  3. Click the Use existing manifest from workspace radio button.
  4. Click the Browse button to choose a manifest file from the workbench.
  5. Click Finish. This will create the JAR and optionally a JAR description.

Det eneste punktet som er aktuelt her, er punkt 7 under Creating a new manifest, der du skal angi hvilken klasse som inneholder programmets main-metode. Dette er nødvendig for å få en kjørbar jar-fil. Angi klasse ved å klikke på Browse...-knappen bak tekstfeltet for Main class: og klikk på riktig klasse. Dermed er det bare å gjøre det som står i punkt 8 og alt er klart. (Punktene under Using an existing manifest trenger du ikke bry deg om.)

Generere jar-filer i NetBeans

Vi skal ta for oss hvordan du i NetBeans kan generere en kjørbar jar-fil. Det kan gjøres på litt forskjellige måter, men det greieste er at man først utvikler programmet på vanlig måte i NetBeans og til slutt oppretter et eget NetBeans-prosjekt på grunnlag av den ferdige koden. Det er denne framgangsmåten som blir beskrevet i det følgende.

Merknad

Det viser seg at framgangsmåten som er beskrevet i det følgende ikke virker riktig når man bruker NetBeans 7.0 eller nyere sammen med jdk 1.7.0. Men den virker riktig med NetBeans 7.0 eller nyere og jdk 1.7.0_03 eller nyere, det vil si oppdatering 3 eller nyere av Java 7.

Opprette et NetBeans-prosjekt på grunnlag av eksisterende kode

Vi forutsetter at du allerede har utviklet et program i NetBeans og skal generere en kjørbar jar-fil på grunnlag av dette. Gå da fram på følgende måte:

  1. En katalog med filer kan bare tilhøre ett NetBeans-prosjekt. Du må derfor først kopiere katalogene med de nødvendige kildefilene til et annet sted på "disken" som skal inneholde det nye NetBeans-prosjektet. Dersom for eksempel de nødvendige kildefilene (java-filer, bilde-filer og eventuelt annet, men ikke class-filer), ligger i en katalog src, eventuelt med diverse underkataloger, kan du kopiere src-katalogen til et passende sted. Dette trenger ikke å være samme sted som der prosjektkatalogen for NetBeans-prosjektet ligger.
  2. Neste skritt er å opprette et nytt NetBeans-prosjekt ved at du i NetBeans-vinduet for eksempel velger menyalternativet File > New Project...
  3. Under Choose Project i det dialogvinduet som da åpner seg, velger du Java under Categories: og Java Project with Existing Sources under Projects:. Klikk deretter på Next >.
  4. I dialogvinduet kommer du til sida Name and Location. Bak Project Name: skriver du det navnet du ønsker at det nye prosjektet ditt skal ha. Navnet bør selvsagt antyde hva slags program det dreier seg om. Noe annet trenger du ikke gjøre på denne sida, men pass på at det er haket av i avkryssingsboksen for Set as Main Project. Klikk på Next >
  5. I dialogvinduet kommer du nå til sida for Existing Sources. Her må du angi hvilke kataloger som skal brukes som kilde for programmet. Det gjør du ved å klikke på knappen Add Folder... og så manøvrere deg fram til den katalogen som inneholder kildefilene. Dersom de ligger i katalogen src beskrevet under punkt 1 ovenfor, må du finne fram til denne, klikke på den og så klikke på Open. (Du kan altså ikke velge en katalog som allerede tilhører et annet NetBeans-prosjekt.) Dersom katalogene med kildefiler ligger på flere forskjellige steder, må du utføre operasjonen med Add Folder... flere ganger. Filstiene for de katalogene du velger vil etter hvert bli vist i tekstområdet under Source Package Folders:
  6. Dersom det i de katalogene du har valgt ligger noen filer som ikke skal være med i prosjektet, har du mulighet for å ekskludere dem ved at du nå klikker på Next >. Du vil da komme til sida Includes & Excludes. For eksempel så bør ikke class-filer være med, for alle kildefiler vil bli kompilert på nytt. Dersom ingen filer skal unntas, klikker du isteden på Finish

Det nye prosjektet vil nå på vanlig måte åpne seg i NetBeans-vinduet og finnes under prosjektoversikten. Du vil på vanlig måte kunne se på hvilke filer som tilhører prosjektet og hva de inneholder. Neste skritt er nå

Konfigurering av prosjektet

For at generering av kjørbar jar-fil skal bli vellykket, er det nødvendig å foreta et par spesifiseringer:

Sjekke at det er riktig javaversjon

Som nevnt foran, er det nødvendig å bruke NetBeans 7.1 sammen med oppdatering 3 av Java 7 for at det skal virke riktig. Sannsynligvis vil det også gå bra med nyere versjoner av NetBeans og/eller Java. For å sjekke at du har riktig javaversjon gjør du følgende:

  1. Høyreklikk på prosjktnoden (prosjektnavnet på lista over prosjekter i NetBeans-vinduet) og velg Properties (nedest på lista du får opp), slik at du får opp dialogvinduet for Project Properties. I dialogvinduet gjør du følgende:
  2. Klikk på Sources og sjekk at det bak Source/Binary Format: er valgt JDK 7.
  3. Klikk på Libraries og sjekk at det bak Java Platform: er valgt JDK 1.7. Har du på maskinen installert flere versjoner av jdk 1.7, må du passe på at det er jdk 1.7.0_03 eller nyere som er valgt. Om nødvendig må du eventuelt klikke på knappen Manage Platforms... for å få den valgt, eller få forsikret deg om at det er den som er valgt.
  4. Klikk OK for å lukke dialogvinduet for Project Properties.

Sette main-klasse for prosjektet

For å få en jar-fil som er kjørbar på den måten at programmet vil starte opp å kjøre når du dobbeltklikker på filnavnet, så er det nødvendig å spesifisere hva som er main-klasse for programmet. (Opplysninger om dette vil bli lagt inn i JARs såkalte manifestfil.) For å sette main-klasse for prosjektet gjør du følgende:

  1. Høyreklikk på prosjektnoden (prosjektnavnet på lista over prosjekter i NetBeans-vinduet) og velg Properties.
  2. I dialogvinduet for Project Properties klikker du på Run. Bak Main Class: må du klikke på knappen Browse... . I dialogboksen som da kommer opp må du klikke på klassenavnet som inneholder main-metoden for programmet og så klikke på knappen Select Main Class for å velge denne.
  3. Klikk på OK for å lukke dialogvinduet for Project Properties.

Bygge prosjektet og opprette jar-fil

Å bygge prosjektet vil si å kompilere alle kildefiler og generere jar-fil som inneholder all nødvendig informasjon for å kunne kjøre programmet. For å bygge prosjektet gjør du følgende:

Ved bygging av prosjektet skjer følgende:

Kjøre og distribuere jar-fila

Etter at du har gjennomført prosedyren som er beskrevet ovenfor med å generere jar-fil, kommer det spennende øyeblikket med å teste om den virker. Vi prøver først å kjøre den fra NetBeans-vinduet. Det får du gjort ved å høyreklikke prosjektnoden i lista over prosjekter. (Dersom du har vært inne på Files for å se på innholdet i manifestfila, så må du først gå tilbake til Projects.) Så velger du alternativet Run. Da skal programmet kjøre!

Når du har fått jar-fila til å kjøre fra NetBeans-vinduet, kommer turen til å teste den utenfor dette. Prøv først å bruke maskinens filutforsker til å manøvrere deg fram til jar-fila som skal befinne seg i katalogen PROSJEKTHJEM/dist. (Se ovenfor angående PROSJEKTHJEM.) Dobbelklikk på jar-fila. Er alt riktig, skal nå programmet kjøre.

Distribuere programmet til andre brukere

Når du har fått kontrollert at jar-fila kjører programmet også når du er utenfor NetBeans-vinduet, skal du kunne kopiere den til hvor som helst eller sende den til hvem du vil som et kjørbart program. Forutsetningen er at Javas kjøresystem jre i en tilstrekkelig ny versjon er installert på riktig måte på vedkommende maskin.

Obs! Jar-fila som er opprettet på måten som er beskrevet ovenfor vil ikke inneholde programmets kildefiler (java-filene). Ved innlevering av programmer for godkjenning eller sensur må du derfor i tillegg til den kjørbare jar-fila også levere java-filene, slik at den som skal vurdere programmet ditt også har muligheter til å se på kildekoden.

Copyright © Kjetil Grønning og Eva Hadler Vihovde, revidert 2012

Innholdsoversikt for programutvikling