Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[MNG-8302] Revert "Make rootDirectory really mandatory" #1800

Merged
merged 1 commit into from
Oct 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,7 @@ 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 @@ -105,6 +105,7 @@
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 @@ -631,7 +632,12 @@ private void buildBuildPom() throws ModelBuilderException {
top = top.toAbsolutePath().normalize();

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

// Locate and normalize the root POM if it exists, fallback to top otherwise
Path root = modelProcessor.locateExistingPom(rootDirectory);
Expand Down Expand Up @@ -1232,11 +1238,19 @@ Model readFileModel() throws ModelBuilderException {
Model doReadFileModel() throws ModelBuilderException {
ModelSource modelSource = request.getSource();
Model model;
Path rootDirectory = request.getSession().getRootDirectory();
Path rootDirectory;
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 @@ -1647,7 +1661,12 @@ private Model doLoadDependencyManagement(
return null;
}

Path rootDirectory = request.getSession().getRootDirectory();
Path rootDirectory;
try {
rootDirectory = request.getSession().getRootDirectory();
} catch (IllegalStateException e) {
rootDirectory = null;
}
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 = getMultiModuleProjectDirectory();
Optional<Path> rdf = getRootDirectoryFallback();
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> getMultiModuleProjectDirectory() {
protected Optional<Path> getRootDirectoryFallback() {
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,7 +52,6 @@
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 @@ -154,12 +153,12 @@ public Instant getStartTime() {

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

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

@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(true)
MavenExecutionRequest request = new DefaultMavenExecutionRequest()
.setPom(pom)
.setProjectPresent(true)
.setShowErrors(true)
Expand All @@ -102,7 +102,6 @@ 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(true);
DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
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(true);
DefaultMavenExecutionRequest mavenExecutionRequest = new DefaultMavenExecutionRequest();
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,7 +20,6 @@

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 @@ -173,12 +172,6 @@ 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,7 +21,6 @@
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 @@ -91,8 +90,7 @@ protected File getProject(String name) throws Exception {

protected MavenExecutionRequest createMavenExecutionRequest(File pom) throws Exception {
MavenExecutionRequest request = new DefaultMavenExecutionRequest()
.setRootDirectory(
pom != null ? pom.toPath().getParent() : Paths.get("").toAbsolutePath())
.setRootDirectory(pom != null ? pom.toPath().getParent() : null)
.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(true);
DefaultMavenExecutionRequest request = new DefaultMavenExecutionRequest();
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(true);
DefaultMavenExecutionRequest mer = new DefaultMavenExecutionRequest();
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(true), new DefaultMavenExecutionResult());
getContainer(), repoSession, new DefaultMavenExecutionRequest(), new DefaultMavenExecutionResult());
session.setSession(defaultSessionFactory.newSession(session));

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