Java mit Modulen kompilieren klappt nicht

Bitte aktiviere JavaScript!
Guten Abend zusammen,

ich bekomme es einfach nicht hin mein Test-Projekt mit Modulen zu kompilieren. Ich bin dieses Tutorial durchgegangen. Allerdings klappt das bei mir nicht. Ich bekomme immer diese Fehlermeldung:

Code:
ProjectOne\module-info.java:1: error: module not found on module source path
module ModuleOne {
^
ProjectOne\main\Start.java:1: error: not in a module on the module source path
package main;
^
ProjectTwo\module-info.java:1: error: module not found on module source path
module ModuleTwo {
^
ProjectTwo\lib\PC.java:1: error: not in a module on the module source path
package lib;
^
4 Errors

Mein System:
Windows 10 x64
OpenJDK 11
Notepad++

Mein Ziel ist es mit jlink ein modulares JRE zu erstellen um es an einen Kunden auszuliefern.

Meine Verzeichnisstruktur:
Code:
├───bin
├───mods
├───ProjectOne
│   │   module-info.java
│   │
│   └───main
│           Start.java
│
└───ProjectTwo
    │   module-info.java
    │
    └───lib
            PC.java

Mit folgenden Befehl versuche ich den Code zu kompilieren:
Code:
javac -d mods --module-source-path ProjectOne ProjectOne\module-info.java ProjectOne\main\Start.java ProjectTwo\module-info.java ProjectTwo\lib\PC.java
Wie erwähnt bekomme ich die oben genannte Fehlermeldung. Ich denke mal, dass ich auch ProjectTwo im --module-source-path angeben muss, aber wie?

MfG memo1990
 
A

Anzeige


Vielleicht hilft dir dieser Kurs hier weiter: (hier klicken)
Wenn Du mehrere Module auf einmal kompilieren willst:
  1. der module-source-path muss das Verzeichnis angeben, das die Ordner der Module enthält (bei Dir wäre das einfach ".", also die Wurzel Deiner Verzeichnisstruktur)
  2. die Module müssen sich in Ordnern befinden, die nach den Modulnamen benannt sind.
Ergo: benenne ProjectOne in ModuleOne und ProjectTwo in ModuleTwo um und führe aus
Code:
javac -d mods --module-source-path . ModuleOne\module-info.java ModuleOne\main\Start.java ModuleTwo\module-info.java ModuleTwo\lib\PC.java
 
Guten Morgen zusammen,

nach mehreren Tagen Einarbeit habe ich es soweit geschafft mein Test-Programm mit javac zu kompilieren, mit jar zu archivieren und mit jlink zu linken. nach jlink habe ich jetzt folgende Verzeichnisstruktur:

Code:
│   release
│
├───bin
│   │   api-ms-win-core-console-l1-1-0.dll
│   │   api-ms-win-core-datetime-l1-1-0.dll
│   │   api-ms-win-core-debug-l1-1-0.dll
│   │   api-ms-win-core-errorhandling-l1-1-0.dll
│   │   api-ms-win-core-file-l1-1-0.dll
│   │   api-ms-win-core-file-l1-2-0.dll
│   │   api-ms-win-core-file-l2-1-0.dll
│   │   api-ms-win-core-handle-l1-1-0.dll
│   │   api-ms-win-core-heap-l1-1-0.dll
│   │   api-ms-win-core-interlocked-l1-1-0.dll
│   │   api-ms-win-core-libraryloader-l1-1-0.dll
│   │   api-ms-win-core-localization-l1-2-0.dll
│   │   api-ms-win-core-memory-l1-1-0.dll
│   │   api-ms-win-core-namedpipe-l1-1-0.dll
│   │   api-ms-win-core-processenvironment-l1-1-0.dll
│   │   api-ms-win-core-processthreads-l1-1-0.dll
│   │   api-ms-win-core-processthreads-l1-1-1.dll
│   │   api-ms-win-core-profile-l1-1-0.dll
│   │   api-ms-win-core-rtlsupport-l1-1-0.dll
│   │   api-ms-win-core-string-l1-1-0.dll
│   │   api-ms-win-core-synch-l1-1-0.dll
│   │   api-ms-win-core-synch-l1-2-0.dll
│   │   api-ms-win-core-sysinfo-l1-1-0.dll
│   │   api-ms-win-core-timezone-l1-1-0.dll
│   │   api-ms-win-core-util-l1-1-0.dll
│   │   api-ms-win-crt-conio-l1-1-0.dll
│   │   api-ms-win-crt-convert-l1-1-0.dll
│   │   api-ms-win-crt-environment-l1-1-0.dll
│   │   api-ms-win-crt-filesystem-l1-1-0.dll
│   │   api-ms-win-crt-heap-l1-1-0.dll
│   │   api-ms-win-crt-locale-l1-1-0.dll
│   │   api-ms-win-crt-math-l1-1-0.dll
│   │   api-ms-win-crt-multibyte-l1-1-0.dll
│   │   api-ms-win-crt-private-l1-1-0.dll
│   │   api-ms-win-crt-process-l1-1-0.dll
│   │   api-ms-win-crt-runtime-l1-1-0.dll
│   │   api-ms-win-crt-stdio-l1-1-0.dll
│   │   api-ms-win-crt-string-l1-1-0.dll
│   │   api-ms-win-crt-time-l1-1-0.dll
│   │   api-ms-win-crt-utility-l1-1-0.dll
│   │   java.dll
│   │   java.exe
│   │   javaw.exe
│   │   jimage.dll
│   │   jli.dll
│   │   keytool.exe
│   │   msvcp140.dll
│   │   net.dll
│   │   nio.dll
│   │   ucrtbase.dll
│   │   vcruntime140.dll
│   │   verify.dll
│   │   zip.dll
│   │
│   └───server
│           jvm.dll
│
├───conf
│   │   net.properties
│   │
│   └───security
│       │   java.policy
│       │   java.security
│       │
│       └───policy
│           │   README.txt
│           │
│           ├───limited
│           │       default_local.policy
│           │       default_US_export.policy
│           │       exempt_local.policy
│           │
│           └───unlimited
│                   default_local.policy
│                   default_US_export.policy
│
├───include
│   │   classfile_constants.h
│   │   jni.h
│   │   jvmti.h
│   │   jvmticmlr.h
│   │
│   └───win32
│           jni_md.h
│
├───legal
│   └───java.base
│           ADDITIONAL_LICENSE_INFO
│           aes.md
│           asm.md
│           ASSEMBLY_EXCEPTION
│           c-libutl.md
│           cldr.md
│           icu.md
│           LICENSE
│           public_suffix.md
│           unicode.md
│           zlib.md
│
└───lib
    │   classlist
    │   jrt-fs.jar
    │   jvm.cfg
    │   jvm.lib
    │   modules
    │   tzdb.dat
    │   tzmappings
    │
    ├───security
    │       blacklisted.certs
    │       cacerts
    │       default.policy
    │       public_suffix_list.dat
    │
    └───server
            Xusage.txt
Meine Frage dazu: Wo befindet sich mein Test-Programm? Wie starte ich es jetzt aus dem modularen JRE?

MfG Memo1990
 
Genauso wie mit dem JDK. Du kannst aber bei jlink auch die launcher-Option angeben, dann wird im bin-Ordner noch eine ausführbare Datei mit dem in der Option angegebenen Namen erzeugt, die Du dann direkt ausführen kannst.
 
Danke. Soweit klappt alles. Eine Frage noch: Bei mir zwei Dateien erstellt, wenn ich den --launcher Parameter angebe, eine xy-Datei und eine xy.bat-Datei? Ist das soweit richtig?

Wozu die Datei ohne Endung. Ich habe mal die mit Notepad++ geöffnet. Darin steht das gleiche Befehl wie in der xy.bat-Datei.
 
Danke. Soweit klappt alles. Eine Frage noch: Bei mir zwei Dateien erstellt, wenn ich den --launcher Parameter angebe, eine xy-Datei und eine xy.bat-Datei? Ist das soweit richtig?

Wozu die Datei ohne Endung. Ich habe mal die mit Notepad++ geöffnet. Darin steht das gleiche Befehl wie in der xy.bat-Datei.
Ist das Shell-Skript zum starten, quasi das "unixoide" Äquivalent zur bat.
 
Zuletzt bearbeitet:
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben