You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/09/10 09:00:39 UTC

[isis] 02/02: ISIS-2426: project-model: fix maven root model not found (tooling)

This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 89514f31c7be149be64f266dc0a800b2718aa35a
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 10 10:59:29 2020 +0200

    ISIS-2426: project-model: fix maven root model not found (tooling)
---
 .../tooling/projectmodel/ProjectNodeFactory.java   | 38 +++++++++++++++-------
 .../projectmodel/maven/MavenModelFactory.java      |  5 +--
 .../projectmodel/maven/SimpleModelResolver.java    | 30 ++++++++++-------
 3 files changed, 47 insertions(+), 26 deletions(-)

diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java
index f57112a..61667d0 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory.java
@@ -23,6 +23,8 @@ import java.util.Objects;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import javax.annotation.Nullable;
+
 import org.apache.maven.model.Model;
 import org.gradle.tooling.GradleConnector;
 import org.gradle.tooling.model.GradleProject;
@@ -30,20 +32,21 @@ import org.gradle.tooling.model.GradleProject;
 import org.apache.isis.tooling.projectmodel.maven.MavenModelFactory;
 import org.apache.isis.tooling.projectmodel.maven.SimpleModelResolver;
 
+import lombok.NonNull;
 import lombok.val;
 import lombok.extern.log4j.Log4j2;
 
 @Log4j2
 public class ProjectNodeFactory {
 
-    public static ProjectNode maven(File projRootFolder) {
+    public static ProjectNode maven(final @NonNull File projRootFolder) {
         val modelResolver = new SimpleModelResolver(projRootFolder);
         val rootModel = modelResolver.getRootModel();
-        val interpolate = false; //XXX experimental
+        val interpolate = false; //XXX interpolation is experimental
         return visitMavenProject(null, rootModel, modelResolver, interpolate);
     }
 
-    public static ProjectNode gradle(File projRootFolder) {
+    public static ProjectNode gradle(final @NonNull File projRootFolder) {
         try(val projectConnection = GradleConnector.newConnector().forProjectDirectory(projRootFolder).connect()) {
             val rootProject = projectConnection.getModel(GradleProject.class);
             val rootNode = visitGradleProject(null, rootProject);
@@ -54,9 +57,9 @@ public class ProjectNodeFactory {
     // -- HELPER MAVEN
 
     private static ProjectNode visitMavenProject(
-            ProjectNode parent, 
-            Model mavenProj, 
-            SimpleModelResolver modelResolver,
+            final @Nullable ProjectNode parent, 
+            final @NonNull Model mavenProj, 
+            final @NonNull SimpleModelResolver modelResolver,
             boolean interpolate) {
         
         val interpolatedProj = interpolate 
@@ -69,7 +72,9 @@ public class ProjectNodeFactory {
         return projNode;
     }
     
-    private static ProjectNode toProjectNode(ProjectNode parent, Model mavenProj) {
+    private static ProjectNode toProjectNode(
+            final @Nullable ProjectNode parent, 
+            final @NonNull Model mavenProj) {
         val projNode = ProjectNode.builder()
                 .parent(parent)
                 .artifactKey(artifactKeyOf(mavenProj))
@@ -84,14 +89,17 @@ public class ProjectNodeFactory {
 
     }
     
-    private static ArtifactKey artifactKeyOf(Model mavenProj) {
+    private static ArtifactKey artifactKeyOf(final @NonNull Model mavenProj) {
         val groupId = MavenModelFactory.getGroupId(mavenProj);
         val artifactId = mavenProj.getArtifactId();
         val version = MavenModelFactory.getVersion(mavenProj);
         return ArtifactKey.of(groupId, artifactId, version);
     }
     
-    private static Iterable<Model> childrenOf(Model mavenProj, SimpleModelResolver modelResolver) {
+    private static Iterable<Model> childrenOf(
+            final @NonNull Model mavenProj, 
+            final @NonNull SimpleModelResolver modelResolver) {
+        
         return Stream.<String>concat(
                 mavenProj.getProfiles().stream().flatMap(profile->profile.getModules().stream()),
                 mavenProj.getModules().stream())
@@ -103,7 +111,10 @@ public class ProjectNodeFactory {
     
     // -- HELPER GRADLE
     
-    private static ProjectNode visitGradleProject(ProjectNode parent, GradleProject gradleProj) {
+    private static ProjectNode visitGradleProject(
+            final @Nullable ProjectNode parent, 
+            final @NonNull GradleProject gradleProj) {
+        
         val projNode = toProjectNode(parent, gradleProj);
         for(val child : gradleProj.getChildren()){
             visitGradleProject(projNode, child);
@@ -111,7 +122,10 @@ public class ProjectNodeFactory {
         return projNode;
     }
 
-    private static ProjectNode toProjectNode(ProjectNode parent, GradleProject gradleProj) {
+    private static ProjectNode toProjectNode(
+            final @Nullable ProjectNode parent, 
+            final @NonNull GradleProject gradleProj) {
+        
         val projNode = ProjectNode.builder()
                 .parent(parent)
                 .artifactKey(artifactKeyOf(gradleProj))
@@ -123,7 +137,7 @@ public class ProjectNodeFactory {
         return projNode;
     }
 
-    private static ArtifactKey artifactKeyOf(GradleProject gradleProj) {
+    private static ArtifactKey artifactKeyOf(final @NonNull GradleProject gradleProj) {
         val pomFile = new File(gradleProj.getProjectDirectory().getAbsoluteFile(), "pom.xml");
         if(pomFile.canRead()) {
             val mavenModel = MavenModelFactory.readModel(pomFile);
diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/MavenModelFactory.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/MavenModelFactory.java
index d016f15..dc8cafc 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/MavenModelFactory.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/MavenModelFactory.java
@@ -30,6 +30,7 @@ import org.apache.maven.model.building.ModelBuildingRequest;
 import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
 import org.apache.maven.model.resolution.ModelResolver;
 
+import lombok.NonNull;
 import lombok.val;
 import lombok.experimental.UtilityClass;
 import lombok.extern.log4j.Log4j2;
@@ -88,11 +89,11 @@ public class MavenModelFactory {
         return artifactKey;
     }
     
-    public static String getGroupId(Model model) {
+    public static String getGroupId(@NonNull Model model) {
         return Optional.ofNullable(model.getGroupId()).orElseGet(()->model.getParent().getGroupId());
     }
     
-    public static String getVersion(Model model) {
+    public static String getVersion(@NonNull Model model) {
         return Optional.ofNullable(model.getVersion()).orElseGet(()->model.getParent().getVersion());
     }
     
diff --git a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/SimpleModelResolver.java b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/SimpleModelResolver.java
index 7901686..37f8151 100644
--- a/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/SimpleModelResolver.java
+++ b/tooling/project-model/src/main/java/org/apache/isis/tooling/projectmodel/maven/SimpleModelResolver.java
@@ -149,7 +149,7 @@ public class SimpleModelResolver implements ModelResolver {
         try {
             localPath = new File(mavenProj.getPomFile().getParentFile(), realtivePath)
                     .getCanonicalPath();
-        } catch (IOException e) {
+        } catch (Exception e) {
             log.error("cannot resolve local path {} relative to {}", realtivePath, mavenProj.getPomFile().getParent(), e);
             return null;
         }
@@ -169,7 +169,7 @@ public class SimpleModelResolver implements ModelResolver {
     @SneakyThrows
     private void populateCatalogs(final File projectRoot) {
         
-        val localRootPath = projectRoot.getAbsolutePath();
+        val localRootPath = projectRoot.getCanonicalPath();
         
         _Files.searchFiles(projectRoot, 
                 file->
@@ -181,17 +181,23 @@ public class SimpleModelResolver implements ModelResolver {
             
             val model = MavenModelFactory.readModel(pomFile);
             
-            val localPath = pomFile.getParentFile().getAbsolutePath();
+            try {
             
-            if(localPath.equals(localRootPath)) {
-                rootModel = model;
-            }
-            
-            val artifactKey = MavenModelFactory.readArtifactKey(model);
-            if(artifactKey!=null) {
-                log.debug("found {} at {}", artifactKey, model.getPomFile().getAbsolutePath());
-                projectPomCatalog.put(artifactKey, model);    
-                pathToArtifactMap.put(localPath, artifactKey);
+                val localPath = pomFile.getParentFile().getCanonicalPath();
+                
+                if(localPath.equals(localRootPath)) {
+                    rootModel = model;
+                }
+                
+                val artifactKey = MavenModelFactory.readArtifactKey(model);
+                if(artifactKey!=null) {
+                    log.debug("found {} at {}", artifactKey, model.getPomFile().getAbsolutePath());
+                    projectPomCatalog.put(artifactKey, model);    
+                    pathToArtifactMap.put(localPath, artifactKey);
+                }
+                
+            } catch (Exception e) {
+                log.error("cannot resolve local path {}", pomFile.getParentFile().getAbsolutePath(), e);
             }
         });