[ 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)