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