private void initProject()

in impl/maven-core/src/main/java/org/apache/maven/project/DefaultProjectBuilder.java [618:828]


        private void initProject(MavenProject project, ModelBuilderResult result) {
            project.setModel(new org.apache.maven.model.Model(result.getEffectiveModel()));
            project.setOriginalModel(new org.apache.maven.model.Model(result.getFileModel()));

            initParent(project, result);

            Artifact projectArtifact = repositorySystem.createArtifact(
                    project.getGroupId(), project.getArtifactId(), project.getVersion(), null, project.getPackaging());
            project.setArtifact(projectArtifact);

            // only set those on 2nd phase, ignore on 1st pass
            if (project.getFile() != null) {
                Build build = project.getBuild().getDelegate();
                List<org.apache.maven.api.model.Source> sources = build.getSources();
                Path baseDir = project.getBaseDirectory();
                boolean hasScript = false;
                boolean hasMain = false;
                boolean hasTest = false;
                for (var source : sources) {
                    var src = new DefaultSourceRoot(session, baseDir, source);
                    project.addSourceRoot(src);
                    Language language = src.language();
                    if (Language.JAVA_FAMILY.equals(language)) {
                        ProjectScope scope = src.scope();
                        if (ProjectScope.MAIN.equals(scope)) {
                            hasMain = true;
                        } else {
                            hasTest |= ProjectScope.TEST.equals(scope);
                        }
                    } else {
                        hasScript |= Language.SCRIPT.equals(language);
                    }
                }
                /*
                 * `sourceDirectory`, `testSourceDirectory` and `scriptSourceDirectory`
                 * are ignored if the POM file contains at least one <source> element
                 * for the corresponding scope and language. This rule exists because
                 * Maven provides default values for those elements which may conflict
                 * with user's configuration.
                 */
                if (!hasScript) {
                    project.addScriptSourceRoot(build.getScriptSourceDirectory());
                }
                if (!hasMain) {
                    project.addCompileSourceRoot(build.getSourceDirectory());
                }
                if (!hasTest) {
                    project.addTestCompileSourceRoot(build.getTestSourceDirectory());
                }
                for (Resource resource : project.getBuild().getDelegate().getResources()) {
                    project.addSourceRoot(new DefaultSourceRoot(baseDir, ProjectScope.MAIN, resource));
                }
                for (Resource resource : project.getBuild().getDelegate().getTestResources()) {
                    project.addSourceRoot(new DefaultSourceRoot(baseDir, ProjectScope.TEST, resource));
                }
            }

            project.setActiveProfiles(
                    Stream.concat(result.getActivePomProfiles().stream(), result.getActiveExternalProfiles().stream())
                            .map(org.apache.maven.model.Profile::new)
                            .toList());

            project.setInjectedProfileIds("external", getProfileIds(result.getActiveExternalProfiles()));
            project.setInjectedProfileIds(
                    result.getEffectiveModel().getId(), getProfileIds(result.getActivePomProfiles()));

            //
            // All the parts that were taken out of MavenProject for Maven 4.0.0
            //

            project.setProjectBuildingRequest(request);

            // pluginArtifacts
            Set<Artifact> pluginArtifacts = new HashSet<>();
            for (Plugin plugin : project.getModel().getDelegate().getBuild().getPlugins()) {
                Artifact artifact = repositorySystem.createPluginArtifact(new org.apache.maven.model.Plugin(plugin));

                if (artifact != null) {
                    pluginArtifacts.add(artifact);
                }
            }
            project.setPluginArtifacts(pluginArtifacts);

            // reportArtifacts
            Set<Artifact> reportArtifacts = new HashSet<>();
            for (ReportPlugin report :
                    project.getModel().getDelegate().getReporting().getPlugins()) {
                Plugin pp = Plugin.newBuilder()
                        .groupId(report.getGroupId())
                        .artifactId(report.getArtifactId())
                        .version(report.getVersion())
                        .build();

                Artifact artifact = repositorySystem.createPluginArtifact(new org.apache.maven.model.Plugin(pp));

                if (artifact != null) {
                    reportArtifacts.add(artifact);
                }
            }
            project.setReportArtifacts(reportArtifacts);

            // extensionArtifacts
            Set<Artifact> extensionArtifacts = new HashSet<>();
            List<Extension> extensions =
                    project.getModel().getDelegate().getBuild().getExtensions();
            if (extensions != null) {
                for (Extension ext : extensions) {
                    String version;
                    if (ext.getVersion() == null || ext.getVersion().isEmpty()) {
                        version = "RELEASE";
                    } else {
                        version = ext.getVersion();
                    }

                    Artifact artifact = repositorySystem.createArtifact(
                            ext.getGroupId(), ext.getArtifactId(), version, null, "jar");

                    if (artifact != null) {
                        extensionArtifacts.add(artifact);
                    }
                }
            }
            project.setExtensionArtifacts(extensionArtifacts);

            // managedVersionMap
            Map<String, Artifact> map = Collections.emptyMap();
            final DependencyManagement dependencyManagement =
                    project.getModel().getDelegate().getDependencyManagement();
            if (dependencyManagement != null
                    && dependencyManagement.getDependencies() != null
                    && !dependencyManagement.getDependencies().isEmpty()) {
                map = new LazyMap<>(() -> {
                    Map<String, Artifact> tmp = new HashMap<>();
                    for (Dependency d : dependencyManagement.getDependencies()) {
                        Artifact artifact =
                                repositorySystem.createDependencyArtifact(new org.apache.maven.model.Dependency(d));
                        if (artifact != null) {
                            tmp.put(d.getManagementKey(), artifact);
                        }
                    }
                    return Collections.unmodifiableMap(tmp);
                });
            }
            project.setManagedVersionMap(map);

            // release artifact repository
            if (project.getDistributionManagement() != null
                    && project.getDistributionManagement().getRepository() != null) {
                try {
                    DeploymentRepository r = project.getModel()
                            .getDelegate()
                            .getDistributionManagement()
                            .getRepository();
                    if (r.getId() != null
                            && !r.getId().isEmpty()
                            && r.getUrl() != null
                            && !r.getUrl().isEmpty()) {
                        ArtifactRepository repo = MavenRepositorySystem.buildArtifactRepository(
                                new org.apache.maven.model.DeploymentRepository(r));
                        repositorySystem.injectProxy(request.getRepositorySession(), List.of(repo));
                        repositorySystem.injectAuthentication(request.getRepositorySession(), List.of(repo));
                        project.setReleaseArtifactRepository(repo);
                    }
                } catch (InvalidRepositoryException e) {
                    throw new IllegalStateException(
                            "Failed to create release distribution repository for " + project.getId(), e);
                }
            }

            // snapshot artifact repository
            if (project.getDistributionManagement() != null
                    && project.getDistributionManagement().getSnapshotRepository() != null) {
                try {
                    DeploymentRepository r = project.getModel()
                            .getDelegate()
                            .getDistributionManagement()
                            .getSnapshotRepository();
                    if (r.getId() != null
                            && !r.getId().isEmpty()
                            && r.getUrl() != null
                            && !r.getUrl().isEmpty()) {
                        ArtifactRepository repo = MavenRepositorySystem.buildArtifactRepository(
                                new org.apache.maven.model.DeploymentRepository(r));
                        repositorySystem.injectProxy(request.getRepositorySession(), List.of(repo));
                        repositorySystem.injectAuthentication(request.getRepositorySession(), List.of(repo));
                        project.setSnapshotArtifactRepository(repo);
                    }
                } catch (InvalidRepositoryException e) {
                    throw new IllegalStateException(
                            "Failed to create snapshot distribution repository for " + project.getId(), e);
                }
            }

            // remote repositories
            List<ArtifactRepository> remoteRepositories = request.getRemoteRepositories();
            try {
                remoteRepositories = projectBuildingHelper.createArtifactRepositories(
                        project.getModel().getRepositories(), remoteRepositories, request);
            } catch (Exception e) {
                result.getProblemCollector()
                        .reportProblem(new org.apache.maven.impl.model.DefaultModelProblem(
                                "",
                                Severity.ERROR,
                                Version.BASE,
                                project.getModel().getDelegate(),
                                -1,
                                -1,
                                e));
            }
            project.setRemoteArtifactRepositories(remoteRepositories);
        }