# Java mit Modulen kompilieren klappt nicht



## memo1990 (9. Nov 2018)

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:


```
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:

```
├───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:

```
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


----------



## mihe7 (10. Nov 2018)

Wenn Du mehrere Module auf einmal kompilieren willst:

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)
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

```
javac -d mods --module-source-path . ModuleOne\module-info.java ModuleOne\main\Start.java ModuleTwo\module-info.java ModuleTwo\lib\PC.java
```


----------



## memo1990 (13. Nov 2018)

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:



Spoiler: Verzeichnisstruktur





```
│   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


----------



## mihe7 (13. Nov 2018)

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.


----------



## memo1990 (14. Nov 2018)

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.


----------



## mrBrown (15. Nov 2018)

memo1990 hat gesagt.:


> 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.


----------



## memo1990 (15. Nov 2018)

Ah ok danke. Sorry für die Rechtschreibung im vorherigen Post.


----------



## Simkec (24. Dez 2018)

Eine Lösung dafür schon gefunden?


----------



## memo1990 (25. Dez 2018)

Hi @Simkec,

welche Lösung meinst du?


----------



## mihe7 (25. Dez 2018)

Genau, welche Lösung meint der Bot?


----------

