Avatar billede rmjdk Nybegynder
17. oktober 2007 - 15:28 Der er 12 kommentarer og
1 løsning

Runtime.exec() på linux

Jeg skal have kørt en kommando fra en Oracle Application Server via Runtime.exec(), problemet er at jeg få en IOException hver gang - uanset kommando. Har prøvet med de mest almene kommandoer, pwd, whoami, ls - intet virker.
Koden virker på en windows maskine hvor jeg kan kalde tracert, ping osv.

Toppen af StackTrace ser således ud:
java.io.IOException: whoami: not found
  java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
  java.lang.ProcessImpl.start(ProcessImpl.java:65)
  java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
  java.lang.Runtime.exec(Runtime.java:591)
Avatar billede arne_v Ekspert
17. oktober 2007 - 15:41 #1
Husk at du kun kan kalde en executable. Hvis du vil kalde en shell kommando
skal du kalde en shell executable og lade den udfoere en intern kommando.

pwd og ls lyder som shell interne kommandoer.
Avatar billede rmjdk Nybegynder
17. oktober 2007 - 16:59 #2
jeg skal lave et kald til Apache Ant, fx "ant -Denv= -Dpwd=pass deploy"...

Kaldet skal udføres indtil flere gange med forskellige parametre, vil det sige, at jeg for hvert kald skal skrive til en .sh fil og så eksekverer den ?
Avatar billede arne_v Ekspert
17. oktober 2007 - 17:13 #3
Runtime.getRuntime().exec(new String[] { "bash", "ant", "-Dfoo=bar", "mittarget" } );

burde virke.
Avatar billede arne_v Ekspert
17. oktober 2007 - 17:13 #4
Eller er Ant jo java og burde derfor kunne kaldes uden Runtime exec !
Avatar billede rmjdk Nybegynder
17. oktober 2007 - 21:36 #5
Jeg har kigget på nogle eksempler hvor Ant kaldes fra Java, de er dog alle fra dengang det hed Jakarta Ant og ikke var Apache Ant. F.eks. http://www.onjava.com/pub/a/onjava/2002/07/24/antauto.html?page=1 .

Disse klasser (Project, ProjectHelper) har jeg ikke i JDev, er de "deprecated" eller hvordan ?
Avatar billede rmjdk Nybegynder
17. oktober 2007 - 21:51 #6
Var for hurtig på tasterne, havde ikke tilføjet Apache Ant til projektet.
Avatar billede arne_v Ekspert
18. oktober 2007 - 04:21 #7
Jeg er til de simple løsninger.

        System.setProperty("ant.home", "/where/ant/is/installed");
        org.apache.tools.ant.launch.Launcher.main(new String[] { "target" });

med ant-launcher.jar i classpath.
Avatar billede rmjdk Nybegynder
18. oktober 2007 - 08:56 #8
Er igang med at kigge på Apaches Ant klasser til Java, men  ville gerne have exec() til at virke. Har prøvet med følgende String cmd[] = { "bash", "ant", "-version" }. Får samme IOException "bash not found".
Avatar billede rmjdk Nybegynder
18. oktober 2007 - 15:16 #9
Jeg vil køre en executeTarget() på mit Project objekt, dens baseDir er sat til det rigtige, og det target jeg har valgt findes i build filen, alligevel får jeg en

java.lang.NullPointerException
  org.apache.tools.ant.Task.perform(Task.java:373)
  org.apache.tools.ant.Target.execute(Target.java:341)
  org.apache.tools.ant.Target.performTasks(Target.java:369)
  org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
  org.apache.tools.ant.Project.executeTarget(Project.java:1185)
  nnit.deployment.helper.DeploymentHelper.deploy(DeploymentHelper.java:97)
Avatar billede arne_v Ekspert
19. oktober 2007 - 01:45 #10
Hvorfor ikke bare bruge mit 18/10-2007 04:21:24 eksempel ?

Hvis du vil exec'e kan du evt. prøve med fuld path til bash !
Avatar billede rmjdk Nybegynder
06. november 2007 - 10:52 #11
smid svar arne
Avatar billede arne_v Ekspert
06. november 2007 - 15:37 #12
ok
Avatar billede arne_v Ekspert
26. november 2007 - 21:54 #13
saa mangler du bare at acceptere
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester