Builder nötig ?

DefconDev

Bekanntes Mitglied
Hallo zusammen,

ich habe ein Hobby-Projekt, welches folgende Struktur besitzt:



die roten Felder sind klassische Pakete mit den Klassen.
Im Ordner sind resources wie .properties Dateien in hellblau und das gelbe Feld ist der Ordner für alle .fxml. Ich arbeite mit JavaFX, wenn das relevant ist.

Hinzu kommt, dass ich externe Libs eingebunden habe. Jetzt möchte ich das ganze Projekt so zusammen schnüren, dass ich das als .jar erstellen kann. Bisher ist das nicht möglich weil die Jar nach dem Erstellen keine Pfade mehr findet. Brauche ich jetzt einen Builder um das zu bewerkstelligen oder kann ich auch die Boardmittel von Eclipse verwenden?
 

mrBrown

Super-Moderator
Mitarbeiter
Der Einsatz eines Build-Tools ist bei sowas generell zu empfehlen, Eclipse kann das aber auch von Haus aus.

Bei Problemen mit Pfaden kann der Fehler aber auch in deinem Programm liegen, welche Pfade findet der denn nicht?
 

DefconDev

Bekanntes Mitglied
Sorry, dass ich erst so spät antworte, war noch arbeiten.
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: java.util.MissingResourceException: Can't find bundle for base name language.lang, locale ger
at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
at java.util.ResourceBundle.getBundleImpl(Unknown Source)
at java.util.ResourceBundle.getBundle(Unknown Source)
at language.Language.<init>(Language.java:19)
at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:20)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
... 1 more
Exception running application matchMakerMain.MatchMaker_Main

Will ungern die Pfade permanent ändern für die Variante in der IDE und für das Jar.
 

DefconDev

Bekanntes Mitglied
Code:
package language;

import java.util.Locale;
import java.util.ResourceBundle;

public class Language {
   
    private Locale locale;
    private ResourceBundle bundle;
    public static String currentLanguage;
   
    public ResourceBundle getBundle() {
        return bundle;
    }
   
    public Language(String lang) {
        currentLanguage = lang;
        locale = new Locale(lang);
        bundle= ResourceBundle.getBundle("language.lang",locale);
    }
}

Code:
package matchMakerMain;

import java.util.prefs.Preferences;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import language.Language;


public class MatchMaker_Main extends Application{

    private static final String version = "4.1_16.01.2018";

    @Override
    public void start(Stage stage) throws Exception {
        Preferences pref = Preferences.userNodeForPackage(MatchMaker_Main.class);
       
        FXMLLoader loader = new FXMLLoader(getClass().getResource("/matchMakerView/MatchMaker_MainScene.fxml"), new Language(pref.get("Language","GER")).getBundle());
       
        Parent root = loader.load();
        Scene scene = new Scene(root);
       
        stage.setScene(scene);
        stage.setTitle("AgeMaker "+version+"@Hades85");
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
 

mrBrown

Super-Moderator
Mitarbeiter
Der korrekte Local-ID wäre "de_DE", nicht "ger". Könnte damit zusammenhängen.

Kannst du ansonsten die Datei direkt laden, ohne ResourceBundle?
 

DefconDev

Bekanntes Mitglied
Also in Eclipse kann ich die ohne Murksen starten. Das ändern der Local-ID hat aber auch nichts gebracht. Zeigt den selben Fehler an wenn ich das Projekt exportiere.
 

DefconDev

Bekanntes Mitglied
Das kann ich dir nicht sagen, weil meine FXML-Dateien alle Platzhalter besitzen und die gefüllt werden mit der jeweiligen Language Property. Das heisst ohne ResourceBundle kann ich keine FXML laden.
 

mrBrown

Super-Moderator
Mitarbeiter
Der Fehler ist, dass eine Datei nicht gefunden wird: die .properties, mit den entsprechenden Übersetzungen.
Versuch diese mal ganz normal mit getResource zu laden.
 

DefconDev

Bekanntes Mitglied
Der Fehler hat sich doch verändert nachdem ich Locale im Namen geändert habe:
java.util.MissingResourceException: Can't find bundle for base name queries, locale de_DE
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException:
file:/C:/Users/marco/Desktop/Test.jar!/matchMakerView/MatchMaker_Tab_Match.fxml
file:/C:/Users/marco/Desktop/Test.jar!/matchMakerView/MatchMaker_MainScene.fxml:51

at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2571)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.access$2700(FXMLLoader.java:103)
at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1143)
at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:22)
at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
... 1 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.Trampoline.invoke(Unknown Source)
at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
... 18 more
Caused by: java.lang.NullPointerException
at database.Database.loadPlayer(Database.java:111)
at database.Database.initDatabase(Database.java:60)
at database.Database.getInstanz(Database.java:46)
at mainController.Match_Controller.initialize(Match_Controller.java:55)
... 28 more
Exception running application matchMakerMain.MatchMaker_Main

Jetzt findet er die Property mit meinen DB Querys nicht.


EDIT: private final String ressourcePath = "resources\\queries\\";
 

DefconDev

Bekanntes Mitglied
Code:
private void loadQueryBundle() {
        try {
            File file = new File(ressourcePath);
            URL[] urls = { file.toURI().toURL() };
            ClassLoader loader = new URLClassLoader(urls);
            queryBundle = ResourceBundle.getBundle("queries", Locale.getDefault(), loader);

        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
 

mrBrown

Super-Moderator
Mitarbeiter
Code:
private void loadQueryBundle() {
        try {
            File file = new File(ressourcePath);
            URL[] urls = { file.toURI().toURL() };
            ClassLoader loader = new URLClassLoader(urls);
            queryBundle = ResourceBundle.getBundle("queries", Locale.getDefault(), loader);

        } catch (Exception ex) {
            System.out.println(ex);
        }
    }
Sowas geht in jedem Fall schief, warum dieser Umweg über File -> URI -> URL -> ClassLoader?
 

mrBrown

Super-Moderator
Mitarbeiter
Wenn man URLs braucht, kann man einfach aus dem String eine URL machen, und spart sich File und URI.
Die drei lassen jeweils unterschiedliche Zeichen zu, weshalb es da zu Problemen kommen wird.


Allerdings braucht man an der Stelle keinen ClassLoader, man kann einfach den passenden Pfad übergeben.
Aus den spärlichen Informationen hier würde ich auf "queries.queries" tippen. (die properties-Datei heißt queries und liegt im Ordner queries in resources?)
 

DefconDev

Bekanntes Mitglied
Code:
private void loadQueryBundle() {
        try {
//            File file = new File(ressourcePath);
//            URL[] urls = { file.toURI().toURL() };
//            ClassLoader loader = new URLClassLoader(urls);
//            queryBundle = ResourceBundle.getBundle("queries", Locale.getDefault(), loader);
            String filename = "queries/queries.properties";
            InputStream input = Database.class.getClassLoader().getResourceAsStream(filename);
            prop = new Properties();
           
            prop.load(input);
        } catch (Exception ex) {
            System.out.println(ex);
        }
    }

Habe das jetzt auf deine Empfehlung hin geändert. Jetzt wird die DB nicht mehr gefunden.

Code:
Mai 05, 2018 2:54:39 AM database.Database initDatabase
SCHWERWIEGEND: null
org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such table: am_view_finalplayerstats)
        at org.sqlite.core.DB.newSQLException(DB.java:909)
        at org.sqlite.core.DB.newSQLException(DB.java:921)
        at org.sqlite.core.DB.throwex(DB.java:886)
        at org.sqlite.core.NativeDB.prepare_utf8(Native Method)
        at org.sqlite.core.NativeDB.prepare(NativeDB.java:127)
        at org.sqlite.core.DB.prepare(DB.java:227)
        at org.sqlite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:81)
        at database.Database.selectTable(Database.java:172)
        at database.Database.loadPlayer(Database.java:122)
        at database.Database.initDatabase(Database.java:67)
        at database.Database.getInstanz(Database.java:53)
        at mainController.Match_Controller.initialize(Match_Controller.java:55)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.Trampoline.invoke(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.access$2700(FXMLLoader.java:103)
        at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1143)
        at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
        at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
        at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:22)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
        at java.lang.Thread.run(Unknown Source)

org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (no such table: am_view_finalplayerstats)
        at org.sqlite.core.DB.newSQLException(DB.java:909)
        at org.sqlite.core.DB.newSQLException(DB.java:921)
        at org.sqlite.core.DB.throwex(DB.java:886)
        at org.sqlite.core.NativeDB.prepare_utf8(Native Method)
        at org.sqlite.core.NativeDB.prepare(NativeDB.java:127)
        at org.sqlite.core.DB.prepare(DB.java:227)
        at org.sqlite.jdbc3.JDBC3Statement.executeQuery(JDBC3Statement.java:81)
        at database.Database.selectTable(Database.java:172)
        at database.Database.loadPlayer(Database.java:122)
        at database.Database.initDatabase(Database.java:67)
        at database.Database.getInstanz(Database.java:53)
        at mainController.Match_Controller.initialize(Match_Controller.java:55)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.Trampoline.invoke(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.access$2700(FXMLLoader.java:103)
        at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1143)
        at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746)
        at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
        at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:22)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
        at java.lang.Thread.run(Unknown Source)
Exception in Application start method
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
        at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
        at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException:
file:/C:/Users/marco/Desktop/Test.jar!/matchMakerView/MatchMaker_MainScene.fxml

        at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2571)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441)
        at javafx.fxml.FXMLLoader.load(FXMLLoader.java:2409)
        at matchMakerMain.MatchMaker_Main.start(MatchMaker_Main.java:22)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
        at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
        at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
        ... 1 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.Trampoline.invoke(Unknown Source)
        at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
        at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2566)
        ... 12 more
Caused by: java.lang.NullPointerException
        at mainController.TreeView_Controller.createTreeViewChilds(TreeView_Controller.java:50)
        at mainController.TreeView_Controller.<init>(TreeView_Controller.java:26)
        at mainController.Main_Controller.initialize(Main_Controller.java:33)
        ... 22 more
Exception running application matchMakerMain.MatchMaker_Main
 

DefconDev

Bekanntes Mitglied
Dann gibt es wohl diese Tabelle nicht... was soll man denn sonst dazu sagen?
Der Inhalt der DB wurde beim Exportieren nicht kopiert, warum auch immer. Hätte gestern Nacht darauf wetten können dass es nicht an der Tabelle liegt...Dachte mit SQL Error findet er die DB nicht.
Jedenfalls klappt es jetzt, das Programm kann jetzt gestartet werden.

Wie kann ich denn jetzt bewerkstelligen dass die externen Libs mit auf Github/Gitlab landen?

Ich danke dir vielmals dass du bis in die Puppen gestern, dir die Zeit und GEDULD genommen hast mir zu helfen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Singatur nötig, und wenn ja wie Tools - Maven, Gradle, Ant & mehr 6

Ähnliche Java Themen

Neue Themen


Oben