Taidan olla hieman tyhmä aloittelijaksikin kun en edes osaa kääntää javatiedostoja. Käytössä win98 ja JCreator-editori: käännettäessä antaa seuraavanlaisen ilmoituksen:
Invalid command line. Error : Invalid path
Command : C:OhjelmatiedostotJavaj2re1.4.1_05injavac.exe -classpath "C: reeni" -d C: reeni @src_ekayri.txt"
Directory : C:Omat tiedostotjavaEkayri
Process completed.
Ekayri.java-tiedosto on tallennettu c: reeni tiedostoon, jonne myös .class tiedoston pitäisi JCreatorin asennusten mukaan kääntyä, mutta ei. Autoexec.bat näyttää seuraavalta:
PATH=C:OhjelmatiedostotJavaj2re1.4.1_05in
SET CLASSPATH=.;C reeni;C:Omat tiedostotjava
pitäiskös sinne vielä lisätä jotain vai tehdä mitä?
Invalid command line. Error : Invalid path
Command : C:OhjelmatiedostotJavaj2re1.4.1_05injavac.exe -classpath "C: reeni" -d C: reeni @src_ekayri.txt"
Directory : C:Omat tiedostotjavaEkayri
Process completed.
Ekayri.java-tiedosto on tallennettu c: reeni tiedostoon, jonne myös .class tiedoston pitäisi JCreatorin asennusten mukaan kääntyä, mutta ei. Autoexec.bat näyttää seuraavalta:
PATH=C:OhjelmatiedostotJavaj2re1.4.1_05in
SET CLASSPATH=.;C reeni;C:Omat tiedostotjava
pitäiskös sinne vielä lisätä jotain vai tehdä mitä?
Vastaukset 5
Vanhimmat
Kurkkaappa hieman tarkemmin tuota tekemääsi classpath-asetusta? Onkohan se nyt ihan varmasti oikein muotoiltu, vai löytyisikö siitä kenties jotain häikkää?
JCreator ei muuten itse tarvitse autoexec.bat:iin classpath-muuttujaa, koska se määrittää ne itse projektin luontivaiheessa. Oletusarvoisesti JCreator asettaa projektille classpath-muuttujan siihen kansioon, johon käännettu class-tiedosto luodaan.
JCreatorissa voit myös määrittää jokaiselle projektille oman JDK-profiilin kirjastoineen, jotta käännetty ohjelmasi myös toimii suunnitellussa ympäristössä (lue: mikäli kääntäjä ei löydä käyttämääsi kirjastoa niin silloin se todennäköisesti puuttuu myös kohdekoneelta).
Itse tein omaan JCreator:iin määritykset J2SE:lle, J2ME:lle ja J2ME_Nokia version:lle.
Ym. määritys lähtee liikkeelle JCreatorin valikosta "Project -> Project settings...", jonka alta löytyy paikat, johon käytetyn virtuaalikoneen määritykset tehdään (JDK Profiles), määritetään muiden kuin virtuaalikoneen käyttämien kirjastojen sijainnit (Required Libraries).
JCreatorin työtilaan (Workspace) voit määrittää useita projekteja (Projects) ja joidenka kunkin alle voidaan tehdä useita java-tiedostoja.
Valitse/luo uusi "Workspace" ja lisää siihen uusi projekti. Uusi projekti tulee oletusarvoisesti aktiiviseksi ja nyt menet valikon "Project -> Project Settings..." kautta tekemään tälle projektillesi tarvittavat määritykset käytetystä JDK-profiilista ja kirjastoista. Samalla voit myös määrittää paikan mihin käännety class-tiedosto sijoitetaan (output) ja näet alla JCreator:n automaattisesti tekemän classpath-määrityksen.
Alkuun tietenkin voi tuntua turhalta moinen workspacien kanssa pelleily, mutta myöhemmin oikeantyylinen lähtölaukaus maksaa varmasti vaivan. Ainakin mulla on paraikaa auki workspace, jossa sijaitsee seitsemän projektia ja lukematon määrä java-tiedostoja. Parasta koko hommassa on se, että yksi java-tiedosto voidaan sijoittaa kahteen eri projektiin, mutta käännetään eri määrityksillä (J2SE / J2ME).
Lopuksi, sun kannattaa jossain vaiheessa hieman tutustua JAR-pakkaukseen, joka käytännössä muistuttaa tuttua ZIP-tiedostoa. Pakkaamalla käyttämäsi luokat (".class") yhteen JAR-pakettiin saat etenkin verkkokäytössä sovelluksestasi huomattavasti enemmän irti (paketti siirretään yhdellä kertaa koneelta A koneelle B). Huomaa myös, että classpath-muuttuja voidaan määrittää kokonaiseen Jar-pakettiin, jolloin näiden määritysten määrä putoaa yksittäiskappaleisiin. Esimerkiksi kaikki omat luokkasi voivat sijaita "omat.jar"-paketissa, jolloin muita määrityksiä ei tarvita.
Näppärimmin Jar-paketointi tehdään bat-ohjelman kautta, jolloin pakkauksen (esim. "omat.jar") päivittäminen onnistuu pikakuvakkeen kautta. Tuohon samaan bat:iin voidaan myöhemmin lisätä vielä jar-paketin digitaalinen allekirjoitus jarsigner:llä, joka estää muita väärentämästä ohjelmaasi verkkosovelluksen siirtyessä verkossa koneelta A koneelle B. (Allekirjoituksen verifiointi otetaan käyttöön virtuaalikoneen "-Djava.security.manager"-kytkimellä.)
Toivottavasti kirjoituksestani on apua Java-koodaamisesi alkutaipaleelle ja vakuuttavan sinut kielessä piilevistä kyvyistä. Älä lannistu vaan laita Java laulamaan pirunmoista kyytiä, Java rules forever!!!
-Jonttu-
Millä java -kehittemillä voidaan tehdä sovelluksia joista voidaan tehdä ikonista aukeavia exe -tiedostoja. Voiko JCreattor:illa tai muilla ilmais -kehittimillä?
Ei varmaankaan vastaa kysymykseesi, mutta pakkaamalla kaikki käytetyt java-luokat (.class) yhteen jar-pakettiin ja sijoittamalla sinne manifestin (jossa kerrotaan mikä paketin class:stä pitää sisällään main-ohjelman), saadaan ohjelma käynnistymään vaikka paketin kaksoisklikkauksella.
Exe:stä tämä poikkeaa nähdäkseni siten, että käynnistävässä koneessa pitää olla java-virtuaalikone, kun taas exe:ssä tätä tarvetta ei tietääkseni ole?
Tuo jar-paketin käyttö on kuitenkin houkuttelevampi vaihtoehto, koska sitä ei ole pakko edes asentaa fyysisesti kohdekoneelle vaan se voidaan sijoittaa vaikka web-palvelimelle, jolloin muutosten tekeminen pakettiin yksinkertaistuu huomattavasti.
Eli, tässä mallissa käyttäjän koneelle asennetaan pieni ja simppeli URLClassLoader-luokkaa hyödyntävä apuohjelma (JarRunner), joka lataa sovelluksen dynaamisesti verkosta. Ladattava paketti voidaan allekirjoittaa digitaalisesti, jolloin verkkoväärennösten ja virusten uhka eliminoituu. Aitouden tarkistus edellyttää kuitenkin, että lataavan kohdekoneen "-Djava.security.manager" kytkin on päällä.
Experimenttejä kokeilevalle kerrottakoon, että "-Djava.security.manager":n käyttö edellyttää myös JarRunnerin allekirjoittamista, koska tällöin kaikkien ajettavien luokkien tarkistus tehdään oli niiden alkuperä mistä tahansa.
Toinen huomatus koskee allekirjoituksessa käytetyn sertifikaatin asentamista kohdekoneeseen ja sille myönnettäviä ajo-oikeuksia. Eli, "-Djava.security.manager"-kytkin edellyttää allekirjoituksen olemassaoloa ja oikein tehtyä ajo-oikeusmäärittelyä (policy-file) tai muuten homma tyssää niille sijoillensa Security Managerin heittäessä liikkeelle "SecurityException"-virheluokan.
Mikäli taas "-Djava.security.manager"-kytkin ei ole päällä ja ohjelma ladataan verkosta JarRunnerilla niin silloin sovellus saa KAIKKI OIKEUDET. Eli, sitä kohdellaan kuten mitä tahansa kiinteästi koneella sijaitsevaa ohjelmaa, joka voi lukea, kirjoittaa, poistaa ja välittää tietoa täysin vapaasti. Asia kannattaa huomioida etenkin, jos lataus tapahtuu jostain sellaisesta osoitteesta, jonka ohjelmista ei voi olla kovinkaan varma.
Digitaalinen allekirjoitus suojaa myös verkkoväärennösten mahdollisuudelta ns "Man in the Middle" hyökkäyksessä, joten dynaamisissa sovelluksissa niiden käyttö on suositeltavaa.
-Jonttu-
PS. Mitenköhän Microsoftissa kyseinen turvallisuusmäärittely olikaan toteutettu? ;)
Voisitko vielä kertoa ohjeet miten esim. koneeseen joshon on ohjelmoitu JCreattori:lla graaffinen -sovellus - tehdään tuo jar-paketti, että voidaan käyttää ko. koneella ko. sovellusta ilman komentokehotetta klikkaamalla ikonia.
..mutta olisit säästänyt meikäläisen työtä aika paljon, kun olisit selvittänyt sen itse...
Anyway ohessa ohjeet vaikka vähän pidemmällekin:
CreatePackage.bat:
**************************
REM siirrytään pakattavaan kansioon
cd C:usersjavaclasses
REM poistetaan vanhat pakkaukset
del C:usersjavajars mp.jar
del C:usersjavajarspaketti.jar
REM pakataan kaikki "classes"-kansiosta
jar cvf C:usersjavajars mp.jar *
REM Lisätään manifesti
jar umf C:usersjavajarsMANIFEST.MF C:usersjavajars mp.jar
REM Allekirjoitetaan paketti digitaalisesti.
REM Lisää ohjeita tästä
REM Java Tutoriaalista (tai java.sun.com)
jarsigner -keystore C:usersjavasignjavastore -signedjar C:usersjavajarspaketti.jar C:usersjavajars mp.jar signFiles
REM Informoidaan paketoinnista
@echo "Paketti.jar" luotu ja allekirjoitettu
pause
***************************
EndOfCreatePackage.bat
MANIFEST.MF:
***************************
Manifest-Version: 1.0
Created-By: 1.4.0 (BlaaBlaa Oy)
Main-Class: MainOhjelmanNimiTähänPlease
***************************
EndOfManifest
Digitaalisen allekirjoituksen periaate (komentorivikäskyt):
VAIHE1 (allekirjoitusavaimen luonti):
keytool -genkey -alias signFiles -keypass salasana -keystore javastore -storepass salasana
VAIHE2 (oman sertifikaatin luonti):
keytool -export -keystore javastore -alias signFiles -file omasertifikaatti.cer
VAIHE3 (Asiakas: sertifikaatin lataaminen virtuaalikoneseen > "java.home/lib/security/"):
keytool -import -alias BlaaBlaa -file omasertifikaatti.cer -keystore defaultstore
VAIHE4 (lisätään "java.home/lib/security/mypolicy.policy"-tiedosto (txt)):
"mypolicy.policy"
***************************
/* AUTOMATICALLY GENERATED ON Wed Mar 19 16:14:22 EET 2003*/
/* DO NOT EDIT */
keystore "file:${java.home}/lib/security/defaultstore";
grant signedBy "BlaaBlaa" {
permission java.security.AllPermission, signedBy "BlaaBlaa";
};
***************************
EndOfMyPolicy.Policy
VAIHE5 (lisätään java.security-tiedostoon linkki mypolicy.policy-tiedostosta (txt)):
"java.security":
***************************
...
policy.url.1=file:${java.home}/lib/security/java.policy
policy.url.2=file:${user.home}/.java.policy
policy.url.3=file:${java.home}/lib/security/mypolicy.policy
...
***************************
EndOFJava.Security
Shortcut:
javaw -Djava.security.manager -cp C:usersjavajarspaketti.jar MainOhjelmanNimi
Shortcut JarRunnerilla verkosta lataamalla:
javaw.exe -Djava.security.manager -cp C:usersjavajarsJarRunner.jar -Dhttp.proxyHost=meitin.proxy.com -Dhttp.proxyPort=8080 -Dhttp.nonProxyHosts=localhost JarRunner http://localhost/paketti.jar
t. Jonttu
PS. Yksinkertainen versio JarRunnerista löytyy Java Tutoriaalin kautta, Hava a nice day!