[
https://issues.apache.org/jira/browse/MNG-7629?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17678286#comment-17678286
]
ASF GitHub Bot commented on MNG-7629:
-------------------------------------
gnodet commented on code in PR #954:
URL: https://github.com/apache/maven/pull/954#discussion_r1073666636
##########
maven-core/src/main/java/org/apache/maven/ReactorReader.java:
##########
@@ -324,4 +273,185 @@ private static boolean isTestArtifact(Artifact artifact) {
return ("test-jar".equals(artifact.getProperty("type", "")))
|| ("jar".equals(artifact.getExtension()) &&
"tests".equals(artifact.getClassifier()));
}
+
+ private File findInProjectLocalRepository(Artifact artifact) {
+ Path target = getArtifactPath(artifact);
+ return Files.isRegularFile(target) ? target.toFile() : null;
+ }
+
+ /**
+ * Copy packaged and attached artifacts from this project to the
+ * project local repository.
+ * This allows a subsequent build to resume while still being able
+ * to locate attached artifacts.
+ *
+ * @param project the project to copy artifacts from
+ */
+ private void installIntoProjectLocalRepository(MavenProject project) {
+ if (!hasBeenPackagedDuringThisSession(project)) {
+ return;
+ }
+
getProjectArtifacts(project).filter(this::isRegularFile).forEach(this::installIntoProjectLocalRepository);
+ }
+
+ private void cleanProjectLocalRepository(MavenProject project) {
+ try {
+ Path artifactPath = getProjectLocalRepo()
+ .resolve(project.getGroupId())
+ .resolve(project.getArtifactId())
+ .resolve(project.getVersion());
+ if (Files.isDirectory(artifactPath)) {
+ try (Stream<Path> paths = Files.list(artifactPath)) {
+ for (Path path : (Iterable<Path>) paths::iterator) {
+ Files.delete(path);
+ }
+ }
+ try {
+ Files.delete(artifactPath);
+ Files.delete(artifactPath.getParent());
+ Files.delete(artifactPath.getParent().getParent());
+ } catch (DirectoryNotEmptyException e) {
+ // ignore
+ }
+ }
+ } catch (IOException e) {
+ LOGGER.error("Error while cleaning project local repository", e);
+ }
+ }
+
+ /**
+ * Retrieve a stream of the project's artifacts
+ */
+ private Stream<Artifact> getProjectArtifacts(MavenProject project) {
+ Stream<org.apache.maven.artifact.Artifact> artifacts = Stream.concat(
+ Stream.concat(
+ // pom artifact
+ Stream.of(new ProjectArtifact(project)),
+ // main project artifact if not a pom
+ "pom".equals(project.getPackaging()) ? Stream.empty()
: Stream.of(project.getArtifact())),
+ // attached artifacts
+ project.getAttachedArtifacts().stream());
+ return artifacts.map(RepositoryUtils::toArtifact);
+ }
+
+ private boolean isRegularFile(Artifact artifact) {
+ return artifact.getFile() != null && artifact.getFile().isFile();
+ }
+
+ private void installIntoProjectLocalRepository(Artifact artifact) {
+ Path target = getArtifactPath(artifact);
+ try {
+ LOGGER.info("Copying {} to project local repository", artifact);
+ Files.createDirectories(target.getParent());
+ Files.copy(
+ artifact.getFile().toPath(),
+ target,
+ StandardCopyOption.REPLACE_EXISTING,
+ StandardCopyOption.COPY_ATTRIBUTES);
+ } catch (IOException e) {
+ LOGGER.error("Error while copying artifact to project local
repository", e);
+ }
+ }
+
+ private Path getArtifactPath(Artifact artifact) {
+ String groupId = artifact.getGroupId();
+ String artifactId = artifact.getArtifactId();
+ String version = artifact.getBaseVersion();
+ String classifier = artifact.getClassifier();
+ String extension = artifact.getExtension();
+ Path repo = getProjectLocalRepo();
+ return repo.resolve(groupId)
+ .resolve(artifactId)
+ .resolve(version)
+ .resolve(artifactId
+ + "-" + version
+ + (classifier != null && !classifier.isEmpty() ? "-" +
classifier : "")
+ + "." + extension);
+ }
+
+ private Path getProjectLocalRepo() {
+ Path root =
session.getRequest().getMultiModuleProjectDirectory().toPath();
+ return root.resolve("target").resolve("project-local-repo");
Review Comment:
I'm not really sure this is configurable. Is it ?
> Improve resolution of modules within a multi-module build
> ---------------------------------------------------------
>
> Key: MNG-7629
> URL: https://issues.apache.org/jira/browse/MNG-7629
> Project: Maven
> Issue Type: Task
> Reporter: Guillaume Nodet
> Assignee: Guillaume Nodet
> Priority: Major
> Fix For: 4.0.0-alpha-4
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)