Pääteohjaus 6

Tässä ohjauksessa harjoitellaan osiin jaetun tiedoston kääntämistä ja valmiiksi kirjoitettujen aliohjelmakirjastojen sekä pakettien käyttöä. Esimerkkinä on kurssin aliohjelmakirjasto Ali.jar. Yleisohje kirjaston käyttöönotosta on URL:ssä http://www.mit.jyu.fi/~vesal/kurssit/ohj2/ali/.

  1. Kirjastojen käyttö komentoriviltä

    JAR-pakettien käyttäminen komentoriviltä käsin on jokseenkin triviaalia: Ne riittää lisätä CLASSPATH:iin, joko ympäristömuuttujaa tai komentoriviparametreja käyttäen.

    Ympäristömuuttuja asetetaan wintoosaa käytettäessä komennolla

    set CLASSPATH=polku\jartiedosto
    
    ja vastaavasti Linux-alustalla (bash-shell)
    export CLASSPATH=polku/jartiedosto
    

    Classpath voidaan asettaa myös komentoriviparametrina ohjelmaa tai kääntäjää käynnistettäessä.

    java -classpath=jartiedosto Ohjelma
    
    Kannattaa huomata, että jotkut virtuaalikoneet haluavat edellisen muotoon
    java -cp=jartiedosto Ohjelma
    
    tai sitten molempia muotoja voidaan tukea. Näitä molempia on tullut agoran koneilla vastaan.

    Yleensä on tarpeen lisätä myös oletushakemisto luokkapolkuun, sillä virtuaalikone ei etsi class-tiedostoja enää sieltä automaattisesti. Mikäli siis saat edellisiä käyttäessäsi virheilmoituksen, että Ohjelmaa ei löydy, lisää oletushakemisto '.' CLASSPATH:iin. CLASSPATH voi sisältää useita elementtejä, jos ne erotetaan joko puolipistein (windows) tai kaksoispistein (Linux). Esimerkiksi Windowsilla

    java -cp=jartiedosto;. Ohjelma
    

    Käynnistettävä main-metodi voi myös sijaita JAR-tiedostossa. Tällöin ohjelman käynnistys eroaa hivenen edellisestä

    java -jar Ohjelma.jar
    
    Tällöin JAR-tiedostoa ei tarvitse lisätä CLASSPATH:iin.

    Harjoitellaan seuraavaksi pakettien käyttöä.

    1. Tee oman hakemistosi alle hakemisto nineltä paketti.
    2. Kopioi/kirjoita uuteen hakemistoon tiedosto Testi.java
    3. Käännä ja aja tiedosto omasta hakemistostasi käsin komennoilla
      javac paketti/Testi.java
      java paketti/Testi
      
    4. Kopioi omaan hakemistoosi (ei siis paketti-hakemistoon) tiedosto Testiohjelma.java
    5. Käännä ja aja ohjelma (se toimii ilman classpath:n säätämistä).
    6. Rakennetaan seuraavaksi JAR-paketti hakemiston paketti sisällöstä:
      jar -cfv munJar.jar paketti/Testi.class
      
    7. Nimeä seuraavaksi hakemisto paketti jollekin muulle nimelle, jotta se ei häiritse jatkossa.
    8. Miten nyt ajetaan Testiohjelma?
    9. Yritetetään seuraavaksi ajaa JAR-paketti (siellähän oli main-metodi). java -jar munJar.jarjohtaa kuitenkin virheilmoitukseen, sillä pakettiin ei ole määritelty käynnistettävää main-metodia.
      Tätä varten nimeä hakemisto paketti takaisin alkuperäiselle nimelleen ja kirjoita tiedosto manifest omaan hakemistoosi. Tiedoston sisältö on
      Main-Class: paketti.Testi
      
      Tarkista että tiedoston nimi todella on "manifest" eikä esim. "manifest.txt". Tarkista myös että tiedoston ainoa rivin jälkeen on rivinvaihto. Muuten homma ei toimi. Käännetään nyt JAR-tiedosto uudelleen, nyt komennolla
      jar -cmfv manifest munJar.jar paketti/Testi.class
      
    10. Nyt voit käynnistää paketin komennolla java -jar munJar.jar.
  2. Projekteista ja java-ohjelmien ajamisesta

    Kun projektissa on useampia luokkia, monella näistä saattaa olla main- metodi (esimerkiksi luokkien sisään kirjoitetut testiohjelmat). Java-kehittimissä pystyy valitsemaan joustavasti tällä hetkellä ajettavan tiedoston. Kokeile ajettavan tiedoston vaihtoa esim. demotehtävilläsi.

    NetBeans:

    • Tapa 1: Käynnistysnäppäin [F6] käynnistää koodieditorissa tai tiedostopuussa aktiivisena olevan tiedoston, jos tiedostossa on main-metodi.
    • Tapa 2: Käynnistä tiedosto vasemmalla olevasta tiedostopuusta hiiren oikean napin ponnahdusvalikolla: Execute.

    JBuilder:

    • Tapa 1:
      1. Avaa projektin asetukset: Project->Project properties ja valitse Run-välilehti.
      2. Tee uusi ajonaikainen konfiguraatio: Paina New ja anna konfiguraatiolle jokin nimi.
      3. Paina ...-nappia Main class-tekstin oikealla puolella ja valitse projektille haluamasi pääluokka.
      4. Paina Ok. Rastita Run-välilehdeltä haluamasi konfiguraatio oletuskonfiguraatioksi (default)
      5. Paina Ok.
    • Tapa 2: Käynnistä tiedosto vasemmalla olevasta tiedostopuusta hiiren oikean napin ponnahdusvalikolla: Run using defaults.

    Vastaava periaate pätee myös ohjelmien ajamiseen debuggerilla.

  3. Pakettien käyttö kehitysympäristöissä

    Java-kielessä paketti on joukko yhteenliittyviä luokkia, jotka on sijoitettu yhteiseen nimiavaruuteen. Tiedostojärjestelmässä samaan pakettiin kuuluvat luokat sijaitsevat samassa hakemistossa. Hakemiston nimi on myös paketin nimi. Paketit muodostavat hierarkian, esimerkiksi kurssin aliohjelmat ovat paketissa fi.jyu.mit.ohj2 (N-levyllä on vastaava hierarkia N:\kurssit\ohj2\ali\-hakemiston alla). Javan standardikirjastossa olevia paketteja ovat esim. java.lang (tämä on oletuksena aina käytössä), java.util (sisältää esim. kokoelmaluokat) ja java.math (matemaattisia luokkia).

    Huom. import-käsky ei varsinaisesti "ota pakettia käyttöön" eikä vaikuta CLASSPATH-muuttujassa mainittuihin hakemistoihin, joista luokkia etsitään. Erityisesti käsky EI kopioi mitään tietoja paketista työtiedostoon (vrt. esim. C-kielen #include-direktiivi. import-käsky on olennaisesti vain lyhennysmerkintä, jonka ansiosta lähdekoodiin ei tarvitse jokaisen luokan kohdalle merkitä paketteja, joihin luokka kuuluu. Esimerkki:

      import java.util.Arraylist;
    
      public class Testclass {
        // ...
        public static void main(String[] args) {
      	  Arraylist a = new Arraylist();
      		// ...		 
        }
      }
    

    merkitsee samaa kuin

      public class Testclass {
        // ...
        public static void main(String[] args) {
      	  java.util.Arraylist a = new java.util.Arraylist();
      		// ...		 
        }
      }
    

    Lisätietoa pakettien käytöstä on URL:ssä http://java.sun.com/docs/books/tutorial/java/interpack/packages.html.

    Tutkitaan pakettien liittämistä projektiin NetBeansilla tai JBuilderilla. Voit soveltaa ohjeita harjoitustyöhösi tai johonkin demotehtävään, jossa voi käyttää kurssin aliohjelmia.

    NetBeans:

    1. Liitä hakemisto N:\kurssit\ohj2\ali\ NetBeansin tiedostopuuhun. Kertaa tarvittaessa pääteohjaus 3:ssa käsitelty projektin luonti.
    2. Varmista, että tiedostopuussa ei ole Ali.jar-kirjstoa (tt>N:\kurssit\ohj2\ali-hakemiston alla olevat luokat ovat samat kuin Ali.jar-kirjastossa).
    3. Valitse Tools-valikosta Options.
    4. Avaa puusta Building-haara ja edelleen Compiler types. Varmista, että kohtien External compilation ja Internal compilation Target-ominaisuuden arvo on työhakemistosi (pitäisi olla C:\mytemp\tunnus tai vastaava).
    5. Yritä kääntää ohjelma. Jos virheilmoituksissa on Cannot create output file, tarkista edelinen kohta.
    6. Huomaa, että NetBeans luo pakettien pohjalta luodut Class-tiedostot output-hakemiston alle uuteen hakemistopuuhun. Nyt työhakemistosi alle pitäisi ilmestyä hakemistot fi\jyu\mit\ohj2\.

    JBuilder:

    1. Avaa projektin asetukset: Project->Project properties ja valitse Paths-välilehti.
    2. Varmista, että hakemistopolut ovat vastaavasti kuin neuvottu pääteohjaus 3:ssa.
    3. Lisää Source-välilehdelle hakemisto N:\kurssit\ohj2\ali (paina Add nappia ja valitse hakemisto esilletulevasta dialogista).
    4. Varmista Required Libraries-välilehdeltä, että Ali.jar ei ole käytössä (N:\kurssit\ohj2\ali-hakemiston alla olevat luokat ovat samat kuin Ali.jar-kirjastossa).
    5. Yritä kääntää ohjelma. Jos virheilmoituksissa on Cannot create output file, tarkista projektin asetuksista output path (pitäisi olla C:\mytemp\tunnus tai vastaava).
    6. Huomaa, että JBuilder luo pakettien pohjalta luodut Class-tiedostot output-hakemiston alle uuteen hakemistopuuhun. Nyt työhakemistosi alle pitäisi ilmestyä hakemistot fi\jyu\mit\ohj2\.

    Eclipse:

    1. Avaa projektin asetukset: Project->Properties ja valitse Java Build Paths-välilehti(vasemmalla).
    2. Valitse Source.
    3. Paina Add Folder...-nappia.
    4. Valitse projektisi, ja klikkaa Create New Folder...-nappia.
    5. Anna haluamasi nimi kansiolle(esim. Ali), klikkaa Advanced-nappia, ruksaa Link to folder in the file system ja valitse Browse....
    6. Etsi haluamasi hakemisto, valitse OK,OK ja OK. Eclipse voi kysyä, että asetetaanko oletuskäännöshakemistoksi "projektin nimi"/bin, vastaa tähän Yes
  • Kirjastojen käyttö kehitysympäristöissä

    JAR-kirjastot ovat usein paketteja helpompi tapa liittää ulkoisia tiedostoja ohjelmaaan. Tällöin CLASSPATH-muuttujassa ei tarvitse välittää hakemistojen nimistä, vaan riittää, että ilmoitetaan liitettävä JAR-kirjasto.

    Kerrataan JAR-kirjastojen liittäminen projektiin NetBeansilla tai JBuilderilla. Voit soveltaa ohjeita harjoitustyöhösi tai johonkin demotehtävään, jossa voi käyttää kurssin aliohjelmia.

    NetBeans:

    JBuilder:

    1. Valitse Tools->Configure Libraries.
    2. Valitse User home. Paina New-nappia.
    3. Nimeä kirjasto haluamallasi tavalla. Paina Add-nappia.
    4. Valitse n:\kurssit\ohj2\ali\Ali.jar.
    5. Paina Ok molemmissa ikkunoissa sulkeaksesi ne.
    6. Avaa projektin asetukset: Project->Project properties ja valitse Paths-välilehti.
    7. Valitse välilehden alta Required libraries. Paina Add-nappia.
    8. Valitse aiemmin lisäämäsi Ali.jar.

    Eclipse:

    1. Avaa projektin asetukset: Project->Properties ja valitse Java Build Paths-välilehti(vasemmalla).
    2. Valitse Libraries välilehti.
    3. Paina Add external library-nappia.
    4. Etsi lisättävä Jar-tiedosto ja klikkaa open.
    5. Lopuksi sulje Properties klikkaamalla OK.

    Nyt voit käyttää Ali.jar-kirjastoon pakattuja luokkia suoraan ohjelmastasi kopioimatta kirjastoa toiseen hakemistoon. (ainakin Agoranetin koneilta...)

    Omassa koodissasi tarvittavat import-lauseet ja viittaukset kirjaston luokkiin tehdään tavanomaisesti. Esim. import fi.jyu.mit.ohj2.Syotto;-rivi tiedoston alkuun käyttäessäsi Syöttö-luokkaa.

    10:32 18.2.2005
  • Javadoc-dokumentaation generointi

    Kokeillaan lopuksi Javadoc-dokumentaation generointia aluksi komentoriviltä, sitten sovelluskehittimellä. Lisätietoa Javadoc-työkalusta on URL:ssä http://java.sun.com/j2se/javadoc/.

    Siirtäessäsi DemoWWW-ohjelmalla harjoitustyötä verkkoon tiedostoistasi luodaan automaattisesti Javadoc-dokumentaatio ja HTML-esitys koodista. Kokeillaan pelkän dokumentaation luomista komentorivillä.

    1. Käynnistä komentokehote ja siirrä harjoitustyösi työhakemistoosi (c:\myTemp\tunnus\).
    2. Luo uusi hakemisto doc dokumentaatiota varten.
    3. Luo dokumentaatio komennolla javadoc -d doc *.java. Tässä -d -valitsin ilmoittaa hakemiston, minne dokumentaatio luodaan.
    4. Vertaa luomaasi dokumentaatiota W-asemalla olevaan harjoitustyön dokumentaatioon (edellyttäen, että harjoitustyösi on W-asemalla ja olet siirtänyt sen DemoWWW-ohjelmalla).

    Seuraavaksi kokeillaan dokumentaation tekoa NetBeansilla tai JBuilderilla. Varmista, että työhakemistossa oleva harjoitustyö on kehittimessä projektina (tarkista tarvittaessa pääteohjaus 3:sta, miten projekti tehdään).

    NetBeans:

    1. Valitse Tools-valikosta Options.
    2. Avaa puusta Code Documentation-haara ja edelleen Documentation. Varmista, että ominaisuuksista Ask for Destination Directory ja Show in Browser ovat päällä (true).
    3. Avaa puusta Code Documentation->Doclets->Standard Doclet-haara ja kirjoita Destination-ominaisuuteen hakemisto, jonne haluat luoda Javadocin. Sulje ikkuna (Close).
    4. Luo dokumentaatio painamalla vasemmalla olevan Filesystems-puussa olevan työhakemistosi kohdalla hiiren oikean napin ponnahdusvalikosta Tools->Generate Javadoc. NetBeans varmistaa hakemiston, jonne dokumentit luodaan. Paina ok, jolloin Javadoc-ohjelma käynnistyy.
    5. Kun dokumentit on generoitu, NetBeans kysyy, näytetäänkö dokumentaatio selaimessa. Vertaa luotuja tiedostoja W-asemalla olevaan harjoitustyön dokumentaatioon (edellyttäen, että harjoitustyösi on W-asemalla ja olet siirtänyt sen DemoWWW-ohjelmalla).
    6. Huomaa, että voit halutettasi liittää luomasi Javadocit NetBeansin avustukseen kuten Javan API-dokumentaation (ks. pääteohjaus 3).

    JBuilder:

    1. Avaa projektin asetukset: Project->Project properties ja valitse Documentation-välilehti.
    2. Tarkista, että välilehdelle on merkitty hakemisto dokumentteja varten (yleensä doc-niminen työhakemiston alihakemisto. Lisää tai muuta tarvittaessa.
    3. Luo projektin tiedostopuuhun Javadoc-solmu:
      1. JB2006: Valitse File->New->Build->Javadoc tai Vanhat JB:t Valitse Wizars->Javadoc
      2. Paina Next. Esille tulevassa ruudussa voit halutessasi nimetä dokumentin uudelleen. Tarkista, että hakemisto on oikea. Always run Javadoc when building the project kannattaa rastittaa pois. Tällöin dokumentaatiota ei luoda automaattisesti jokaisen käännöksen aikana, mikä lyhentää käännösaikaa. Nyt dokumentaatio luodaan vain erikseen käskettäessa.
      3. Paina Next ja Finish. Vasemmalla olevaan tiedostopuuhun pitäisi ilmestyä uusi Javadoc-solmu (oletusnimi Standard doclet).
    4. Luo dokumentaatio valitsemalla hiiren oikean napin ponnahdusvalikosta Javadoc-solmun päältä Make.
    5. Kun dokumentit on generoitu, Javadoc-solmun alisolmuna on index.html. Avaa dokumentaatio selaimeen ja vertaa sitä W-asemalla olevaan harjoitustyön dokumentaatioon (edellyttäen, että harjoitustyösi on W-asemalla ja olet siirtänyt sen DemoWWW-ohjelmalla).
    6. Huomaa, että dokumenttien generoinnin jälkeen voit tarkastella yksittäisten luokkien dokumentteja suoraan JBuilderissä painamalla koodieditorin alta doc-välilehden päälle.

    Eclipse:

    1. Valitse Projects-valikosta Generate Javadoc...(Eclipsen pitäisi itse osata etsiä javadoc.exe).
    2. Kirjoita Destination-kohtaan minne haluat javadocin menevän
    3. Paina Finish
    4. Jos Javadoceja ei ole ennestään tai hakemistoa, jonka laitoit kohteeseen ei ole, Eclipse kysyy haluatko luoda tällaisen. Vastaa yes.