Issue
I have a Java 11 Modular program that runs fine from the Command prompt. However, when I package it in a Jar file (Jar 11) and try to run it again I am getting "*Error: Could not find or load main class farm.vet.VetMain in module farm.vet*".
I have enclosed an image showing the various commands I have executed from the command line. The first line shows the program running normally (no jar used). There are a few modules involved, farm.vet is the starting point with farm.vet.VetMain containing `main()`.
I create the Jar file - it includes the module-info files for the various modules. However when I try to run it afterwards - that's when I get the error. I then describe the Jar file and am concerned about "No module descriptor". I believe I should have something at the top of the Modular Jar file - is that the reason for my error in running the Jar?
I have also included my directory structure ('out' is the parent directory for all my class files).
Any help greatly appreciated,
Seán.
java -p out -m farm.vet/farm.vet.VetMainjar -cvf mods/farm.vet.jar -C out/ .added manifestadding: farm.animals/(in = 0) (out= 0)(stored 0%)adding: farm.animals/farm/(in = 0) (out= 0)(stored 0%)adding: farm.animals/farm/Animal.class(in = 360) (out= 246)(deflated 31%)adding: farm.animals/farm/cattle/(in = 0) (out= 0)(stored 0%)adding: farm.animals/farm/cattle/Cattle.class(in = 829) (out= 475)(deflated 42%)adding: farm.animals/farm/cattle/Cow.class(in = 999) (out= 548)(deflated 45%)adding: farm.animals/module-info.class(in = 195) (out= 149)(deflated 23%)adding: farm.owner/(in = 0) (out= 0)(stored 0%)adding: farm.owner/farm/(in = 0) (out= 0)(stored 0%)adding: farm.owner/farm/owner/(in = 0) (out= 0)(stored 0%)adding: farm.owner/farm/owner/Owner.class(in = 1569) (out= 853)(deflated 45%)adding: farm.owner/module-info.class(in = 200) (out= 148)(deflated 26%)adding: farm.vet/(in = 0) (out= 0)(stored 0%)adding: farm.vet/farm/(in = 0) (out= 0)(stored 0%)adding: farm.vet/farm/vet/(in = 0) (out= 0)(stored 0%)adding: farm.vet/farm/vet/VetMain.class(in = 710) (out= 448)(deflated 36%)adding: farm.vet/module-info.class(in = 194) (out= 143)(deflated 26%)java -p mods -m farm.vet/farm.vet.VetMainError: Could not find or load main class farm.vet.VetMain in module farm.vetjar --describe-module --file mods/farm.vet.jarNo module descriptor found. Derived automatic module.farm.vet automaticrequires java.base mandatedcontains farm.animalscontains farm.animals.farmcontains farm.animals.farm.cattlecontains farm.ownercontains farm.owner.farm.ownercontains farm.vetcontains farm.vet.farm.vetSolution
There can only be one module per JAR file, since module-info.class must be in the root of the JAR file.
Try:
jar -cvf mods/farm.vet.jar -C out/farm.vet/ .
jar -cvf mods/farm.owner.jar -C out/farm.owner/ .
jar -cvf mods/farm.animals.jar -C out/farm.animals/ .
Based on Project Jigsaw: Module System Quick-Start Guide:
A modular JAR is a regular JAR file that has a module-info.class in its top-level directory.
and The jar Command description:
An archive becomes a modular JAR when you include a module descriptor, module-info.class, in the root of the given directories or in the root of the .jar archive.
I got a bit confused by "root of the given diretories" being mentioned above
Answered By - user16320675
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.