Skip to content

Commit

Permalink
Make rootDirectory really mandatory
Browse files Browse the repository at this point in the history
  • Loading branch information
gnodet committed Oct 8, 2024
1 parent 836621b commit 608a99f
Show file tree
Hide file tree
Showing 13 changed files with 27 additions and 36 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -158,7 +158,6 @@ public interface Session {
* Gets the root directory of the session, which is the root directory for the top directory project.
*
* @return the root directory, never {@code null}
* @throws IllegalStateException if the root directory could not be found
* @see #getTopDirectory()
* @see Project#getRootDirectory()
* @see Project#isRootProject()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
/**
* Interface used to locate the root directory for a given project.
*
* The root locator is usually looked up from the plexus container.
* The root locator is usually looked up from the DI container.
* One notable exception is the computation of the early {@code session.rootDirectory}
* property which happens very early. The implementation used in this case
* will be discovered using the JDK service mechanism.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,6 @@
import org.apache.maven.api.services.model.ProfileActivationContext;
import org.apache.maven.api.services.model.ProfileInjector;
import org.apache.maven.api.services.model.ProfileSelector;
import org.apache.maven.api.services.model.RootLocator;
import org.apache.maven.api.services.xml.XmlReaderException;
import org.apache.maven.api.services.xml.XmlReaderRequest;
import org.apache.maven.api.spi.ModelParserException;
Expand Down Expand Up @@ -633,12 +632,7 @@ private void buildBuildPom() throws ModelBuilderException {
top = top.toAbsolutePath().normalize();

// Obtain the root directory, resolving it if necessary
Path rootDirectory;
try {
rootDirectory = session.getRootDirectory();
} catch (IllegalStateException e) {
rootDirectory = session.getService(RootLocator.class).findMandatoryRoot(top);
}
Path rootDirectory = session.getRootDirectory();

// Locate and normalize the root POM if it exists, fallback to top otherwise
Path root = modelProcessor.locateExistingPom(rootDirectory);
Expand Down Expand Up @@ -1177,19 +1171,11 @@ Model readFileModel() throws ModelBuilderException {
Model doReadFileModel() throws ModelBuilderException {
ModelSource modelSource = request.getSource();
Model model;
Path rootDirectory;
Path rootDirectory = request.getSession().getRootDirectory();
setSource(modelSource.getLocation());
logger.debug("Reading file model from " + modelSource.getLocation());
try {
boolean strict = request.getRequestType() == ModelBuilderRequest.RequestType.BUILD_POM;
try {
rootDirectory = request.getSession().getRootDirectory();
} catch (IllegalStateException ignore) {
rootDirectory = modelSource.getPath();
while (rootDirectory != null && !Files.isDirectory(rootDirectory)) {
rootDirectory = rootDirectory.getParent();
}
}
try (InputStream is = modelSource.openStream()) {
model = modelProcessor.read(XmlReaderRequest.builder()
.strict(strict)
Expand Down Expand Up @@ -1592,12 +1578,7 @@ private Model doLoadDependencyManagement(
return null;
}

Path rootDirectory;
try {
rootDirectory = request.getSession().getRootDirectory();
} catch (IllegalStateException e) {
rootDirectory = null;
}
Path rootDirectory = request.getSession().getRootDirectory();
if (request.getRequestType() == ModelBuilderRequest.RequestType.BUILD_POM && rootDirectory != null) {
Path sourcePath = importSource.getPath();
if (sourcePath != null && sourcePath.startsWith(rootDirectory)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,10 @@ public Path findMandatoryRoot(@Nonnull Path basedir) {
while (rootDirectory != null && !isRootDirectory(rootDirectory)) {
rootDirectory = rootDirectory.getParent();
}
Optional<Path> rdf = getRootDirectoryFallback();
Optional<Path> rdf = getMultiModuleProjectDirectory();
if (rootDirectory == null) {
rootDirectory = rdf.orElseThrow(() -> new IllegalStateException(getNoRootMessage()));
logger.warn(getNoRootMessage());
rootDirectory = rdf.orElseGet(() -> Paths.get("").toAbsolutePath());
} else {
if (rdf.isPresent() && !Objects.equals(rootDirectory, rdf.get())) {
logger.warn("Project root directory and multiModuleProjectDirectory are not aligned");
Expand All @@ -75,7 +75,7 @@ protected boolean isRootDirectory(Path dir) {
return false;
}

protected Optional<Path> getRootDirectoryFallback() {
protected Optional<Path> getMultiModuleProjectDirectory() {
String mmpd = System.getProperty("maven.multiModuleProjectDirectory");
if (mmpd != null) {
return Optional.of(Paths.get(mmpd));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
import org.apache.maven.api.services.RepositoryFactory;
import org.apache.maven.api.services.SettingsBuilder;
import org.apache.maven.api.services.TypeRegistry;
import org.apache.maven.api.services.model.RootLocator;
import org.apache.maven.api.settings.Settings;
import org.apache.maven.api.spi.TypeProvider;
import org.apache.maven.di.Injector;
Expand Down Expand Up @@ -153,12 +154,12 @@ public Instant getStartTime() {

@Override
public Path getTopDirectory() {
return null;
return Paths.get("");
}

@Override
public Path getRootDirectory() {
throw new IllegalStateException();
return getService(RootLocator.class).findMandatoryRoot(getTopDirectory());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ protected File getProject(String name) throws Exception {
}

protected MavenExecutionRequest createMavenExecutionRequest(File pom) throws Exception {
MavenExecutionRequest request = new DefaultMavenExecutionRequest()
MavenExecutionRequest request = new DefaultMavenExecutionRequest(true)
.setPom(pom)
.setProjectPresent(true)
.setShowErrors(true)
Expand All @@ -102,6 +102,7 @@ protected MavenExecutionRequest createMavenExecutionRequest(File pom) throws Exc

if (pom != null) {
request.setMultiModuleProjectDirectory(pom.getParentFile());
request.setRootDirectory(pom.getParentFile().toPath());
}

return request;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ protected void initRepoSession(ProjectBuildingRequest request) throws Exception
session.setLocalRepositoryManager(new LegacyLocalRepositoryManager(localRepo));
request.setRepositorySession(session);

DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest(true);
MavenSession msession =
new MavenSession(getContainer(), session, mavenExecutionRequest, new DefaultMavenExecutionResult());
DefaultSession iSession = new DefaultSession(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ void testThatASystemScopedDependencyIsNotResolvedFromRepositories() throws Excep
new LocalRepository(request.getLocalRepository().getBasedir());
session.setLocalRepositoryManager(new SimpleLocalRepositoryManagerFactory().newInstance(session, localRepo));
LegacySupport legacySupport = container.lookup(LegacySupport.class);
DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest(true);
MavenSession mavenSession =
new MavenSession(container, session, mavenExecutionRequest, new DefaultMavenExecutionResult());
legacySupport.setSession(mavenSession);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@

import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
Expand Down Expand Up @@ -172,6 +173,12 @@ public class DefaultMavenExecutionRequest implements MavenExecutionRequest {

public DefaultMavenExecutionRequest() {}

public DefaultMavenExecutionRequest(boolean withDefaultRoot) {
if (withDefaultRoot) {
setRootDirectory(Paths.get("").toAbsolutePath());
}
}

public static MavenExecutionRequest copy(MavenExecutionRequest original) {
DefaultMavenExecutionRequest copy = new DefaultMavenExecutionRequest();
copy.setLocalRepository(original.getLocalRepository());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import javax.inject.Inject;

import java.io.File;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
Expand Down Expand Up @@ -90,7 +91,8 @@ protected File getProject(String name) throws Exception {

protected MavenExecutionRequest createMavenExecutionRequest(File pom) throws Exception {
MavenExecutionRequest request = new DefaultMavenExecutionRequest()
.setRootDirectory(pom != null ? pom.toPath().getParent() : null)
.setRootDirectory(
pom != null ? pom.toPath().getParent() : Paths.get("").toAbsolutePath())
.setPom(pom)
.setProjectPresent(true)
.setShowErrors(true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public class MavenTestHelper {
public static DefaultRepositorySystemSession createSession(
MavenRepositorySystem repositorySystem, PlexusContainer container) {
DefaultRepositorySystemSession repoSession = new DefaultRepositorySystemSession(h -> false);
DefaultMavenExecutionRequest request = new DefaultMavenExecutionRequest();
DefaultMavenExecutionRequest request = new DefaultMavenExecutionRequest(true);
MavenSession mavenSession = new MavenSession(repoSession, request, new DefaultMavenExecutionResult());
DefaultSession session =
new DefaultSession(mavenSession, null, null, repositorySystem, new DefaultLookup(container), null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ void setup() {
.get()
.withLocalRepositoryBaseDirectories(new File("target").toPath())
.build();
DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest();
DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest(true);
DefaultMavenExecutionResult meres = new DefaultMavenExecutionResult();
MavenSession ms = new MavenSession(rss, mer, meres);
DefaultSession session = new DefaultSession(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ protected void initRepoSession(ProjectBuildingRequest request) throws ComponentL
new DefaultSessionFactory(repoSystem, repositorySystem, new DefaultLookup(container), null);

MavenSession session = new MavenSession(
getContainer(), repoSession, new DefaultMavenExecutionRequest(), new DefaultMavenExecutionResult());
getContainer(), repoSession, new DefaultMavenExecutionRequest(true), new DefaultMavenExecutionResult());
session.setSession(defaultSessionFactory.newSession(session));

DefaultSession s = new DefaultSession(session, null, null, null, null, null);
Expand Down

0 comments on commit 608a99f

Please sign in to comment.