mirror of https://github.com/apache/maven.git
Add a o.a.maven.api.services.Source#resolve method
This commit is contained in:
parent
1865c9c6fd
commit
59a8d90397
|
@ -72,4 +72,18 @@ public interface Source {
|
||||||
*/
|
*/
|
||||||
@Nonnull
|
@Nonnull
|
||||||
String getLocation();
|
String getLocation();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a new source identified by a relative path. Implementation <strong>MUST</strong>
|
||||||
|
* be able to accept <code>relative</code> parameter values that
|
||||||
|
* <ul>
|
||||||
|
* <li>use either / or \ file path separator,</li>
|
||||||
|
* <li>have .. parent directory references,</li>
|
||||||
|
* <li>point either at file or directory.</li>
|
||||||
|
* </ul>
|
||||||
|
*
|
||||||
|
* @param relative is the path of the requested source relative to this source
|
||||||
|
* @return related source or <code>null</code> if no such source
|
||||||
|
*/
|
||||||
|
Source resolve(String relative);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import javax.inject.Singleton;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.net.URI;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -46,7 +47,7 @@ import org.apache.maven.api.services.Source;
|
||||||
import org.apache.maven.artifact.DefaultArtifact;
|
import org.apache.maven.artifact.DefaultArtifact;
|
||||||
import org.apache.maven.artifact.repository.ArtifactRepository;
|
import org.apache.maven.artifact.repository.ArtifactRepository;
|
||||||
import org.apache.maven.model.building.ModelProblem;
|
import org.apache.maven.model.building.ModelProblem;
|
||||||
import org.apache.maven.model.building.ModelSource;
|
import org.apache.maven.model.building.ModelSource2;
|
||||||
import org.apache.maven.project.DefaultProjectBuildingRequest;
|
import org.apache.maven.project.DefaultProjectBuildingRequest;
|
||||||
import org.apache.maven.project.ProjectBuildingException;
|
import org.apache.maven.project.ProjectBuildingException;
|
||||||
import org.apache.maven.project.ProjectBuildingRequest;
|
import org.apache.maven.project.ProjectBuildingRequest;
|
||||||
|
@ -82,17 +83,7 @@ public class DefaultProjectBuilder implements ProjectBuilder {
|
||||||
res = builder.build(path.toFile(), req);
|
res = builder.build(path.toFile(), req);
|
||||||
} else if (request.getSource().isPresent()) {
|
} else if (request.getSource().isPresent()) {
|
||||||
Source source = request.getSource().get();
|
Source source = request.getSource().get();
|
||||||
ModelSource modelSource = new ModelSource() {
|
ModelSource2 modelSource = new SourceWrapper(source);
|
||||||
@Override
|
|
||||||
public InputStream getInputStream() throws IOException {
|
|
||||||
return source.openStream();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String getLocation() {
|
|
||||||
return source.getLocation();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
res = builder.build(modelSource, req);
|
res = builder.build(modelSource, req);
|
||||||
} else if (request.getArtifact().isPresent()) {
|
} else if (request.getArtifact().isPresent()) {
|
||||||
Artifact a = request.getArtifact().get();
|
Artifact a = request.getArtifact().get();
|
||||||
|
@ -228,4 +219,34 @@ public class DefaultProjectBuilder implements ProjectBuilder {
|
||||||
throw new ProjectBuilderException("Unable to build project", e);
|
throw new ProjectBuilderException("Unable to build project", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class SourceWrapper implements ModelSource2 {
|
||||||
|
private final Source source;
|
||||||
|
|
||||||
|
SourceWrapper(Source source) {
|
||||||
|
this.source = source;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public InputStream getInputStream() throws IOException {
|
||||||
|
return source.openStream();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getLocation() {
|
||||||
|
return source.getLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ModelSource2 getRelatedSource(String relPath) {
|
||||||
|
Source rel = source.resolve(relPath);
|
||||||
|
return rel != null ? new SourceWrapper(rel) : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public URI getLocationURI() {
|
||||||
|
Path path = source.getPath();
|
||||||
|
return path != null ? path.toUri() : URI.create(source.getLocation());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue