Skip to content

Commit

Permalink
Make POM and basedire required on the project
Browse files Browse the repository at this point in the history
  • Loading branch information
gnodet committed Jan 23, 2024
1 parent 0383dbf commit 39e5e01
Show file tree
Hide file tree
Showing 4 changed files with 37 additions and 61 deletions.
28 changes: 15 additions & 13 deletions api/maven-api-core/src/main/java/org/apache/maven/api/Project.java
Original file line number Diff line number Diff line change
Expand Up @@ -124,26 +124,28 @@ default Build getBuild() {

/**
* Returns the path to the pom file for this project.
* A project is usually read from the file system and this will point to
* the file. In some cases, a transient project can be created which
* will not point to an actual pom file.
* A project is usually read from a file named {@code pom.xml},
* which contains the {@linkplain #getModel() model} in an XML form.
* When a custom {@link org.apache.maven.api.spi.ModelParser} is used,
* the path may point to a non XML file.
* <p>
* The POM path is also used to define the {@linkplain #getBasedir() base directory}
* of the project.
*
* @return the path of the pom
* @see #getBasedir()
*/
@Nonnull
Optional<Path> getPomPath();
Path getPomPath();

/**
* Returns the project base directory.
*/
@Nonnull
Optional<Path> getBasedir();

/**
* Enforces presence of the project base directory and returns it.
* Returns the project's base directory.
*
* @see #getPomPath()
*/
@Nonnull
default Path requireBasedir() {
return getBasedir().orElseThrow(() -> new IllegalStateException("Project basedir not given"));
default Path getBasedir() {
return getPomPath().getParent();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,18 +97,9 @@ public Model getModel() {

@Nonnull
@Override
public Optional<Path> getPomPath() {
public Path getPomPath() {
File file = project.getFile();
return Optional.ofNullable(file).map(File::toPath);
}

@Override
public Optional<Path> getBasedir() {
File basedir = project.getBasedir();
if (basedir == null) {
return Optional.empty();
}
return Optional.of(basedir.toPath());
return file.toPath();
}

@Nonnull
Expand All @@ -134,13 +125,12 @@ public boolean isExecutionRoot() {

@Override
public boolean isTopProject() {
return getBasedir().isPresent()
&& getBasedir().get().equals(getSession().getTopDirectory());
return getBasedir().equals(getSession().getTopDirectory());
}

@Override
public boolean isRootProject() {
return getBasedir().isPresent() && getBasedir().get().equals(getRootDirectory());
return getBasedir().equals(getRootDirectory());
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;

import org.apache.maven.api.MojoExecution;
import org.apache.maven.api.Project;
Expand Down Expand Up @@ -76,12 +75,8 @@ public PluginParameterExpressionEvaluatorV4(Session session, Project project, Mo
Path basedir = null;

if (project != null) {
Optional<Path> projectFile = project.getBasedir();

// this should always be the case for non-super POM instances...
if (projectFile.isPresent()) {
basedir = projectFile.get().toAbsolutePath();
}
Path projectFile = project.getBasedir();
basedir = projectFile.toAbsolutePath();
}

if (basedir == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,10 +186,8 @@ public void testValueExtractionWithAPomValueContainingAPath() throws Exception {
public void testEscapedVariablePassthrough() throws Exception {
String var = "${var}";

Model model = new Model();
model.setVersion("1");

MavenProject project = new MavenProject(model);
MavenProject project = createDefaultProject();
project.setVersion("1");

ExpressionEvaluator ee = createExpressionEvaluator(project, new Properties());

Expand All @@ -203,10 +201,8 @@ public void testEscapedVariablePassthroughInLargerExpression() throws Exception
String var = "${var}";
String key = var + " with version: ${project.version}";

Model model = new Model();
model.setVersion("1");

MavenProject project = new MavenProject(model);
MavenProject project = createDefaultProject();
project.setVersion("1");

ExpressionEvaluator ee = createExpressionEvaluator(project, new Properties());

Expand All @@ -219,11 +215,9 @@ public void testEscapedVariablePassthroughInLargerExpression() throws Exception
public void testMultipleSubExpressionsInLargerExpression() throws Exception {
String key = "${project.artifactId} with version: ${project.version}";

Model model = new Model();
model.setArtifactId("test");
model.setVersion("1");

MavenProject project = new MavenProject(model);
MavenProject project = createDefaultProject();
project.setArtifactId("test");
project.setVersion("1");

ExpressionEvaluator ee = createExpressionEvaluator(project, new Properties());

Expand All @@ -236,7 +230,7 @@ public void testMultipleSubExpressionsInLargerExpression() throws Exception {
public void testMissingPOMPropertyRefInLargerExpression() throws Exception {
String expr = "/path/to/someproject-${baseVersion}";

MavenProject project = new MavenProject(new Model());
MavenProject project = createDefaultProject();

ExpressionEvaluator ee = createExpressionEvaluator(project, new Properties());

Expand All @@ -250,13 +244,8 @@ public void testPOMPropertyExtractionWithMissingProject_WithDotNotation() throws
String key = "m2.name";
String checkValue = "value";

Properties properties = new Properties();
properties.setProperty(key, checkValue);

Model model = new Model();
model.setProperties(properties);

MavenProject project = new MavenProject(model);
MavenProject project = createDefaultProject();
project.getModel().getProperties().setProperty(key, checkValue);

ExpressionEvaluator ee = createExpressionEvaluator(project, new Properties());

Expand Down Expand Up @@ -320,14 +309,12 @@ private static MavenSession createSession(PlexusContainer container, ArtifactRep

@Test
public void testTwoExpressions() throws Exception {
Build build = new Build();
MavenProject project = createDefaultProject();
Build build = project.getBuild();
build.setDirectory("expected-directory");
build.setFinalName("expected-finalName");

Model model = new Model();
model.setBuild(build);

ExpressionEvaluator expressionEvaluator = createExpressionEvaluator(new MavenProject(model), new Properties());
ExpressionEvaluator expressionEvaluator = createExpressionEvaluator(project, new Properties());

Object value = expressionEvaluator.evaluate("${project.build.directory}" + FS + "${project.build.finalName}");

Expand Down Expand Up @@ -375,7 +362,9 @@ void testRootDirectory() throws Exception {
}

private MavenProject createDefaultProject() {
return new MavenProject(new Model());
MavenProject project = new MavenProject(new Model());
project.setFile(new File("pom.xml").getAbsoluteFile());
return project;
}

private ExpressionEvaluator createExpressionEvaluator(MavenProject project, Properties executionProperties)
Expand Down

0 comments on commit 39e5e01

Please sign in to comment.