private File createMavenProject()

in nb-repository-plugin/src/main/java/org/apache/netbeans/nbm/repository/PopulateRepositoryMojo.java [669:814]


    private File createMavenProject(ModuleWrapper wrapper, List<ModuleWrapper> wrapperList,
            List<ExternalsWrapper> externalsList)
            throws MojoExecutionException {
        Model mavenModel = new Model();

        mavenModel.setGroupId(wrapper.getGroup());
        mavenModel.setArtifactId(wrapper.getArtifact());
        mavenModel.setVersion(wrapper.getVersion());
        mavenModel.setPackaging("jar");
        mavenModel.setModelVersion("4.0.0");
        if (artefactParent != null) {
            mavenModel.setParent(artefactParent);
        }
        ExamineManifest man = wrapper.getModuleManifest();
        List<Dependency> deps = new ArrayList<>();
        if (!man.getDependencyTokens().isEmpty()) {
            for (String elem : man.getDependencyTokens()) {
                // create pseudo wrapper
                ModuleWrapper wr = new ModuleWrapper(elem);
                int index = wrapperList.indexOf(wr);
                if (index > -1) {
                    wr = wrapperList.get(index);
                    Dependency dep;
                    if (wr instanceof ModuleWrapperMaven) {
                        dep = ((ModuleWrapperMaven) wr).getDep();
                    } else {
                        dep = new Dependency();
                        dep.setArtifactId(wr.getArtifact());
                        dep.setGroupId(wr.getGroup());
                        dep.setVersion(wr.getVersion());
                    }
                    dep.setType("jar");
                    //we don't want the API modules to depend on non-api ones..
                    // otherwise the transitive dependency mechanism pollutes your classpath..
                    if (wrapper.getModuleManifest().hasPublicPackages()
                            && !wr.getModuleManifest().hasPublicPackages()) {
                        dep.setScope("runtime");
                    }
                    deps.add(dep);
                } else if (dependencyRepositoryUrl != null) {
                    Dependency dep = new Dependency();
                    dep.setType("jar");
                    String artifactId = elem.replace('.', '-');
                    dep.setArtifactId(artifactId);
                    if (forcedVersion == null) {
                        throw new MojoExecutionException("Cannot use dependencyRepositoryUrl without forcedVersion");
                    }
                    dep.setVersion(forcedVersion);
                    List<RemoteRepository> repos = repositorySystem.newResolutionRepositories(session.getRepositorySession(), Collections.singletonList(new RemoteRepository.Builder(dependencyRepositoryId, "default", dependencyRepositoryUrl).build()));
                    ArtifactRequest artifactRequest = new ArtifactRequest();
                    artifactRequest.setRequestContext("nb-repository-plugin");
                    artifactRequest.setRepositories(repos);
                    artifactRequest.setTrace(RequestTrace.newChild(null, "nb-repository-plugin"));
                    ArtifactResult artifactResult;
                    try {
                        artifactRequest.setArtifact(new DefaultArtifact(groupIdPrefix + GROUP_API, artifactId, "", "pom", forcedVersion));
                        artifactResult = repositorySystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
                        dep.setGroupId(groupIdPrefix + GROUP_API);
                    } catch (ArtifactResolutionException x) {
                        try {
                            artifactRequest.setArtifact(new DefaultArtifact(groupIdPrefix + GROUP_IMPL, artifactId, "", "pom", forcedVersion));
                            artifactResult = repositorySystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
                            dep.setGroupId(groupIdPrefix + GROUP_IMPL);
                            if (wrapper.getModuleManifest().hasPublicPackages()) {
                                dep.setScope("runtime");
                            }
                        } catch (ArtifactResolutionException x2) {
                            try {
                                artifactRequest.setArtifact(new DefaultArtifact(groupIdPrefix + GROUP_EXTERNAL, artifactId, "", "pom", forcedVersion));
                                artifactResult = repositorySystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
                                dep.setGroupId(groupIdPrefix + GROUP_EXTERNAL);
                                if (wrapper.getModuleManifest().hasPublicPackages()) {
                                    dep.setScope("runtime");
                                }
                            } catch (ArtifactResolutionException x3) {
                                getLog().warn(x3);
                                throw new MojoExecutionException("No module found for dependency '" + elem + "'", x);
                            }

                        }

                    }
                    deps.add(dep);
                } else {
                    getLog().warn("No module found for dependency '" + elem + "'");
                }
            }
        }
        //need some generic way to handle Classpath: items.
        //how to figure the right version?
        String cp = wrapper.getModuleManifest().getClasspath();
        if (!cp.isEmpty()) {
            StringTokenizer tok = new StringTokenizer(cp);
            while (tok.hasMoreTokens()) {
                String path = tok.nextToken();
                File f = new File(wrapper.getFile().getParentFile(), path);
                if (f.exists()) {
                    Dependency dep = findExternal(f);
                    if (dep != null) {
                        deps.add(dep);
                        // XXX MNBMODULE-170: repack NBM with *.external
                    } else {
                        ExternalsWrapper ex = new ExternalsWrapper();
                        ex.setFile(f);
                        String artId = f.getName();
                        if (artId.endsWith(".jar")) {
                            artId = artId.substring(0, artId.length() - ".jar".length());
                        }
                        ex.setVersion(wrapper.getVersion());
                        ex.setArtifact(artId);
                        ex.setGroupid(groupIdPrefix + GROUP_EXTERNAL);
                        externalsList.add(ex);
                        dep = new Dependency();
                        dep.setArtifactId(artId);
                        dep.setGroupId(groupIdPrefix + GROUP_EXTERNAL);
                        dep.setVersion(wrapper.getVersion());
                        dep.setType("jar");
                        deps.add(dep);
                    }
                }
            }
        }

        wrapper.deps = deps;
        mavenModel.setDependencies(deps);
        FileWriter writer = null;
        File fil = null;
        try {
            MavenXpp3Writer xpp = new MavenXpp3Writer();
            fil = Files.createTempFile("maven", ".pom").toFile();
            fil.deleteOnExit();
            writer = new FileWriter(fil);
            xpp.write(writer, mavenModel);
        } catch (IOException ex) {
            throw new UncheckedIOException(ex);
        } finally {
            if (writer != null) {
                try {
                    writer.close();
                } catch (IOException io) {
                    throw new UncheckedIOException(io);
                }
            }
        }
        return fil;
    }