Moi!
Oon tekemässä peli serveriä, joka pohjautuu Javaan. Nyt haaste on, että miten saan java pohjaisen tiedotot suoritetuksi Ubuntu serverissä?
Ja löytyy laitoin komennon
java -version
ja vastaus oli tälläinen
java version "1.7.0_21" Java(TM) SE Runtime Environment (build 1.7.0_21-b11) Java HotSpot(TM) Server VM (build 23.21-b01, mixed mode)
Eli java on. Tässä on taas run.sh tiedosto jonka tein.
java -Xmx1500m -cp data/CompiledFiles;deps/poi.jar;deps/mysql.jar;deps/mina.jar;deps/slf4j.jar;deps/slf4j-nop.jar;deps/jython.jar;log4j-1.2.15.jar; server
kun laitan, että
sudo ./run.sh
niin vastaus on tälläinen
./run.sh: 1: deps/poi.jar: Permission denied ./run.sh: 1: deps/mysql.jar: Permission denied ./run.sh: 1: deps/mina.jar: Permission denied ./run.sh: 1: deps/slf4j.jar: Permission denied ./run.sh: 1: deps/slf4j-nop.jar: Permission denied ./run.sh: 1: deps/jython.jar: Permission denied ./run.sh: 1: log4j-1.2.15.jar: not found ./run.sh: 1: server: not found
Miten saan sen toimimaan?
Virheilmoitus ei todellakaan paljasta vikaa.
echo foo; echo bar tulostaa foo bar eli puolipiste toimii erikoismerkkinä.
Mikäli tuo puolipisteillä oleva hökötys on lista, sulje se lainausmerkeillä. Yksi (stara ja heittomerkkinappi) tai kaksinkertaisilla (shifti ja 2).
Niin ja haluatko ajaa javaa roottina?
Juu tarkoitus ois saada nuo java ohjelmat toimimaan jarkuvasti. Mutta tarviiko niille antaa erikseen mitään "permissioneja"? Anteeksi tietämättömyyteni, mutta olen jo epätoivoisesti käynyt googlen läpi monta kertaa.
Kokeileppas seuraavaa...
sudo su ./run.sh
Hyvällä tuurilla toimii...
Tällä ongelmalla ei ole mitään tekemistä minkään tiedostojen oikeuksien kanssa. Sinulle sanottiin jo, että ;-merkkejä sisältävä parametri pitää kirjoittaa lainausmerkkeihin. Mitä kohtaa et ymmärrä?
Nyt komentotulkki tulkitsee rivisi lukuisina eri komentoina. Ensimmäinen komento on tämä:
java -Xmx1500m -cp data/CompiledFiles
Kai saat siitäkin jonkin virheilmoituksen?
Toinen komento on tämä:
deps/poi.jar
Siitä saat virheilmoituksen "deps/poi.jar: Permission denied", koska kyseistä jar-tiedostoa ei voi yrittää käynnistää irrallisena ohjelmana, koska sillä ei ole execute-oikeusbittiä – eikä kuulukaan olla!
OK vaihdoin ; merkit " merkkiin, aluksi ilmoitti, että
Error: Could not find or load main class server.Server
Ja kun otin sen pois tiedostosta tulee vaan ne Javan komennot ja loppuun se Javan nettisivun osoite. Onko sitten mitään mahdollisuutta löytää jokaisesta .jar tiedostosta omaa main class tiedostoa ja laittaa se jokaiseen erikseen?
Juhku kirjoitti:
OK vaihdoin ; merkit " merkkiin, aluksi ilmoitti, että
Mitä, mitä, mitä, mitä, mitä? Ei käsketty vaihtaa mitään vaan lisätä lainausmerkit.
Tulipa nyt kuitenkin mieleen lisäksi, että myös Java noudattaa Linuxissa käyttöjärjestelmän perinteitä, joten polut pitää erotella kaksoispistein eikä puolipistein. Tämän näkisit itsekin, kun lukisit java-komennon käyttöohjeen – jonka lopuksi taisit saadakin näkyviin. Siinä lukee "a : separated list – –". Vaihda siis kaikki ;-merkit :-merkeiksi.
Juu, no sain jotain aikaan ja tuli seuraava, juttu
deps/poi.jar: line 1: PK: command not found deps/poi.jar: line 2: ?eS9: command not found deps/poi.jar: line 14: syntax error near unexpected token `)' ??☼·h&???Z?0??U3C?↔???┘???K8??,??????,?[??▒/?D??B?=? ... Moderaattori poisti paljon roskaa ... ./run.sh: line 3: deps/jython.jar: cannot execute binary file ./run.sh: line 3: log4j-1.2.15.jar: command not found ./run.sh: line 3: server.Server: command not found
No en ole mikään mestari Linuxsin kanssa kun touhuan enemmän PHPn ja HTMLlän kanssa.... voisko muuntaa tän .bat tiedoston
@echo off "C:\Program Files\Java\jdk1.7.0_17\bin/java.exe" -Xmx1300m -cp data/CompiledFiles;deps/poi.jar;deps/mysql.jar;deps/mina.jar;deps/slf4j.jar;deps/slf4j-nop.jar;deps/jython.jar;log4j-1.2.15.jar; server.Server pause
niin .sh tiedostoksi? Olisin hyvin kiitollinen.....
#!/bin/sh java -Xmx1300m -cp "data/CompiledFiles:deps/poi.jar:deps/mysql.jar:deps/mina.jar:deps/slf4j.jar:deps/slf4j-nop.jar:deps/jython.jar:log4j-1.2.15.jar" server.Server
Pitää kyllä olla jokin ongelma ymmärryksessä, jos ei pysty noudattamaan niin yksinkertaista ohjetta kuin "vaihda kaikki ;-merkit :-merkeiksi".
Kiitos kokeilen tota!
Hei!
Nyt on enää sellainen ongelma, että miten saan tuolle .sh tiedostolle osoitettua missä on tämä "server.Server". Tiedosto Server.CLASS sijaitsee kohteessa Data\CompiledFiles\server\Server.class, mutta miten saan sen osoitettua tuolle .sh tiedostolle, kun ei sitä tunnu millään löytyvän vaikka kuinka yritän, kun tulee aina ilmoitus:
Error: Could not find or load main class server.Server
Googlesta olen jo apua etsinyt, mutta en löydä.
No noin yksioikoinen virheilmoitus, jolla on vain kaksi vaihtoehtoa. Joko se ei löydä server.serveriä tai sitten se löytää sen mutta ei tajua siitä höykäsen pöläystä.
Oisko nyt opetella yksi komento. man java
Sieltä kohta -cp
man java kirjoitti:
Specify a list of directories, JAR archives, and ZIP archives to search for class files. Class path entries are separated by colons (:). Specifying -classpath or -cp overrides any setting of the CLASSPATH environment variable. If -classpath and -cp are not used and CLASSPATH is not set, the user class path consists of the current directory (.).
Eli suomeksi. Tunge se polku, mistä tuota server.serveriä haetaan tuonne classpathiin.
Kun nyt manin joukkoon pääsit, niin muita luettavia sivuja ovat ls cat bash rm cp ln echo pwd cd which sed grep cut tr java. Kyllä se siitä kun pääset alkuun. Joskus myös man -k asia voi auttaa oikeille dokumentaatioiden lähteille.
Linux ja UNIX yleensäkään eivät ole vaikeita ympäristöjä. Niissä on vain pieni oppimiskäyrän nousu heti alussa. Lyhyellä oppimäärällä pääsee pitkälle.
OK, en oikein ymmärtänyt....
voukkosetae kirjoitti:
Eli suomeksi. Tunge se polku, mistä tuota server.serveriä haetaan tuonne classpathiin.
Löysin yhden .classpath tiedoston ja sisältö oli tälläinen
<?xml version="1.0" encoding="UTF-8"?> <classpath> <classpathentry kind="src" path="Data"/> <classpathentry kind="src" path="Economy Reset"/> <classpathentry excluding="server/model/players/" kind="src" path="src"/> <classpathentry kind="src" path="src/server/model/players"/> <classpathentry kind="lib" path="deps/jython.jar"/> <classpathentry kind="lib" path="deps/log4j-1.2.15.jar"/> <classpathentry kind="lib" path="deps/mina.jar"/> <classpathentry kind="lib" path="deps/mysql.jar"/> <classpathentry kind="lib" path="deps/poi.jar"/> <classpathentry kind="lib" path="deps/slf4j-nop.jar"/> <classpathentry kind="lib" path="deps/slf4j.jar"/> <classpathentry kind="lib" path="deps/xstream.jar"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="output" path="bin"/> </classpath>
Pitäisikö tuonne lisätä jotain?
Kertooko kukaan mitään vai mikä on?
Lisää tämä ennen java-komentoa:
cd "$(dirname "$0")"/data/CompiledFiles
Aihe on jo aika vanha, joten et voi enää vastata siihen.