private void preparePaths()

in src/main/java/org/apache/maven/plugins/jmod/JModCreateMojo.java [394:474]


    private void preparePaths() {
        boolean hasModuleDescriptor = false;

        // Assuming that the module-info.java is already compiled by compiler plugin so only
        // check if the module-info.class file exists.
        File moduleInfo = new File(targetClassesDirectory, "module-info.class");

        if (moduleInfo.exists() && moduleInfo.isFile()) {
            getLog().debug("We have found a module-info.class file.");
            hasModuleDescriptor = true;
        }

        Collection<File> dependencyArtifacts = getCompileClasspathElements(getProject());

        if (hasModuleDescriptor) {
            // For now only allow named modules. Once we can create a graph with ASM we can specify exactly the modules,
            // and we can detect if auto modules are used. In that case, MavenProject.setFile() should not be used, so
            // you cannot depend on this project and so it won't be distributed.

            modulepathElements = new ArrayList<>();
            classpathElements = new ArrayList<>();

            ResolvePathsResult<File> resolvePathsResult;
            try {

                ResolvePathsRequest<File> request =
                        ResolvePathsRequest.ofFiles(dependencyArtifacts).setMainModuleDescriptor(moduleInfo);

                Toolchain toolchain = getToolchain();
                if (toolchain != null && toolchain instanceof DefaultJavaToolChain) {
                    request.setJdkHome(new File(((DefaultJavaToolChain) toolchain).getJavaHome()));
                }

                resolvePathsResult = locationManager.resolvePaths(request);

                JavaModuleDescriptor moduleDescriptor = resolvePathsResult.getMainModuleDescriptor();

                for (Map.Entry<File, ModuleNameSource> entry :
                        resolvePathsResult.getModulepathElements().entrySet()) {
                    getLog().debug("File: " + entry.getKey().getAbsolutePath() + " "
                            + entry.getValue().name());
                    if (ModuleNameSource.FILENAME.equals(entry.getValue())) {
                        final String message = "Required filename-based automodules detected. "
                                + "Please don't publish this project to a public artifact repository!";

                        if (moduleDescriptor.exports().isEmpty()) {
                            // application
                            getLog().info(message);
                        } else {
                            // library
                            writeBoxedWarning(message);
                        }
                        break;
                    }
                }

                for (File file : resolvePathsResult.getClasspathElements()) {
                    getLog().debug("classpathElements: File: " + file.getPath());
                    classpathElements.add(file.getPath());
                }

                for (File file : resolvePathsResult.getModulepathElements().keySet()) {
                    getLog().debug("modulepathElements: File: " + file.getPath());
                    if (file.isDirectory()) {
                        modulepathElements.add(file.getPath());
                    } else {
                        modulepathElements.add(file.getParent());
                    }
                }
            } catch (IOException e) {
                getLog().warn(e.getMessage());
            }
        } else {
            modulepathElements = Collections.emptyList();

            classpathElements = new ArrayList<String>();
            for (File file : dependencyArtifacts) {
                classpathElements.add(file.getPath());
            }
        }
    }