Tutorials  /  Linux Basics

Kompilieren und Ausführen eines Java Programms: So geht's!

Ccentron Redaktion · Dezember 2024 ·3 Min. Lesezeit ·Linux Basics, Tutorial

Einleitung

Haben Sie sich jemals gefragt, ob es möglich ist, ein Java-Programm direkt aus einem anderen Java-Programm zu kompilieren und auszuführen, ohne manuell in die Befehlszeile einzugreifen? Mit der Methode Runtime.exec(String cmd) haben wir die Möglichkeit, systeminterne Befehle effizient an das zugrunde liegende Betriebssystem zu übermitteln. Dieser leistungsstarke Ansatz ermöglicht es uns, Java-Programme dynamisch auszuführen und dabei die gesamte Steuerung innerhalb des ursprünglichen Programms zu behalten. In diesem Tutorial zeigen wir Ihnen Schritt für Schritt, wie Sie diese Technik anwenden können, um ein Java-Programm aus einem anderen Java-Programm zu kompilieren und auszuführen.

VM

Passende Infrastruktur bei centron

Zum Ausprobieren braucht es keine eigene Hardware: ccloud³ VMs mit vollem Root-Zugriff gibt es ab 3,12 € im Monat, stundengenau abgerechnet und in Sekunden bereit. Cloud Server mieten →

Kompilieren und Ausführen eines Java-Programms aus einem anderen Java-Programm

Schreiben wir ein einfaches Java-Programm, das aus einem anderen Java-Programm kompiliert ist und führen es aus.

Go

package com.journaldev.files;

public class Test {

    public static void main(String[] args) {
        System.out.println("Start");
        for(String str : args){
            System.out.println(str);
        }
    }
}
  

Hier ist das andere Programm, in dem ich die Test-Klasse kompiliere und ausführe.

Go

package com.journaldev.files;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;

public class CompileRunJavaProgram {

    public static void main(String[] args) {
        try {
            runProcess("pwd");
            System.out.println("**********");
            runProcess("javac -cp src src/com/journaldev/files/Test.java");
            System.out.println("**********");
            runProcess("java -cp src com/journaldev/files/Test Hi Pankaj");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void printLines(String cmd, InputStream ins) throws Exception {
        String line = null;
        BufferedReader in = new BufferedReader(new InputStreamReader(ins));
        while ((line = in.readLine()) != null) {
            System.out.println(cmd + " " + line);
        }
    }

    private static void runProcess(String command) throws Exception {
        Process pro = Runtime.getRuntime().exec(command);
        printLines(command + " stdout:", pro.getInputStream());
        printLines(command + " stderr:", pro.getErrorStream());
        pro.waitFor();
        System.out.println(command + " exitValue() " + pro.exitValue());
    }
}
  

Unterschiede in den Befehlen

Beachten Sie die Unterschiede zwischen den Befehlen javac und java. Dies ist erforderlich, da das Arbeitsverzeichnis von Eclipse das Projektstammverzeichnis ist, während sich mein Klassenquellverzeichnis in src befindet.

Hier ist die Ausgabe, die beim Ausführen des obigen Programms aus Eclipse ensteht:

Code

pwd stdout: /Users/pankaj/Documents/eclipse-workspace/JavaExceptions
pwd exitValue() 0
**********
javac -cp src src/com/journaldev/files/Test.java exitValue() 0
**********
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Start
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Hi
java -cp src com/journaldev/files/Test Hi Pankaj stdout: Pankaj
java -cp src com/journaldev/files/Test Hi Pankaj exitValue() 0
  

Kompilieren und Ausführen eines Java Programms plattformunabhängig machen

Das obige Programm funktioniert einwandfrei auf Unix-Systemen, jedoch nicht auf Windows-Systemen, da Windows-Dateitrennzeichen sich von Unix-Dateitrennzeichen unterscheiden. Um das Programm plattformunabhängig zu machen, können wir Befehle als Argumente an die Hauptfunktion übergeben.

Code

public static void main(String[] args) {
    try {
        if(args.length < 2) throw new Exception("Erforderliche Argumente fehlen");
        runProcess(args[0]);
        runProcess(args[1]);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
  

Wir können auch File.separator verwenden, um plattformunabhängige Befehle zu erstellen. Hier ist ein Beispiel:

Code

String separator = File.separator;
System.out.println("Dateitrennzeichen = " + separator);

separator = System.getProperty("file.separator");
System.out.println("Dateitrennzeichen = " + separator);

runProcess("javac -cp src src" + separator + "com" + separator + "journaldev" + separator + "files" + separator + "Test.java");
System.out.println("**********");
runProcess("java -cp src com" + separator + "journaldev" + separator + "files" + separator + "Test Hi Pankaj");
  

Sie erhalten dieselbe Ausgabe wie zuvor.

Fazit für Kompilieren und Ausführen eines Java Programms

Die Verwendung der Runtime.exec-Methode ermöglicht es uns, ein Java-Programm aus einem anderen Java-Programm zu kompilieren und auszuführen, was besonders hilfreich für automatisierte Prozesse oder komplexe Anwendungen sein kann. Die in diesem Beispiel verwendeten Methoden printLines() und runProcess() stammen aus einem anderen Beitrag und wurden für diesen Zweck angepasst. Dieser Ansatz kann zudem mit File.separator oder System.getProperty("file.separator") plattformunabhängig gestaltet werden, um sicherzustellen, dass das Programm sowohl auf Unix- als auch auf Windows-Systemen reibungslos funktioniert.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Linux Basics
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren