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/21 07:08:29 UTC

[isis] 02/02: ISIS-2437: work on settings.gradle generator

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 2cec4a3d4d1f3fc93eebd2ba0f46eec936d419b4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Mon Sep 21 09:08:19 2020 +0200

    ISIS-2437: work on settings.gradle generator
---
 .../tooling/projectmodel/ArtifactCoordinates.java  |  6 +-
 ...pendency.java => ArtifactShortNameFactory.java} | 23 ++-----
 .../isis/tooling/projectmodel/Dependency.java      |  9 ++-
 .../isis/tooling/projectmodel/ProjectNode.java     |  6 +-
 .../projectmodel/ProjectNodeFactory_gradle.java    |  2 +-
 .../projectmodel/ProjectNodeFactory_maven.java     | 17 ++---
 .../GradleDependencies.java}                       | 28 +++------
 .../gradle/GradleDependenciesFactory.java          | 53 ++++++++++++++++
 .../gradle/GradleDependenciesWriter.java           | 73 ++++++++++++++++++++++
 .../projectmodel/gradle/GradleSettingsFactory.java | 12 ++--
 .../projectmodel/gradle/GradleSettingsWriter.java  | 15 +----
 .../WriterAbstract.java}                           | 32 +++++-----
 .../projectmodel/test/GradleDependenciesTest.java  | 33 +++-------
 .../projectmodel/test/GradleSettingsTest.java      | 11 +---
 .../test/ProjectModelTestAbstract.java}            | 30 ++++-----
 .../tooling/projectmodel/test/ProjectTreeTest.java | 23 ++-----
 16 files changed, 213 insertions(+), 160 deletions(-)

diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java
index ef72870..b8c98ee 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactCoordinates.java
@@ -31,14 +31,14 @@ public class ArtifactCoordinates implements Comparable<ArtifactCoordinates> {
 
     @NonNull private final String groupId;
     @NonNull private final String artifactId;
-    @NonNull private final String type;
+    @NonNull private final String packaging;
     @NonNull private final String version;
     
     private final AtomicReference<ComparableVersion> comparableVersion = new AtomicReference<ComparableVersion>();
     
     @Override
     public String toString() {
-        return String.format("%s:%s:%s:%s", groupId, artifactId, type, version); 
+        return String.format("%s:%s:%s:%s", groupId, artifactId, packaging, version); 
     }
 
     // -- COMPARATOR
@@ -46,7 +46,7 @@ public class ArtifactCoordinates implements Comparable<ArtifactCoordinates> {
     private final static Comparator<ArtifactCoordinates> comparator = Comparator
             .comparing(ArtifactCoordinates::getGroupId)
             .thenComparing(ArtifactCoordinates::getArtifactId)
-            .thenComparing(ArtifactCoordinates::getType)
+            .thenComparing(ArtifactCoordinates::getPackaging)
             .thenComparing(ArtifactCoordinates::getComparableVersion);
     
     private ComparableVersion getComparableVersion() {
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java
similarity index 65%
copy from tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
copy to tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java
index 9cd69a5..a56329a 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ArtifactShortNameFactory.java
@@ -18,26 +18,11 @@
  */
 package org.apache.isis.tooling.projectmodel;
 
-import java.util.Comparator;
+import lombok.NonNull;
 
-import lombok.Builder;
-import lombok.Data;
-
-@Data @Builder
-public class Dependency implements Comparable<Dependency> {
-    
-    private final ArtifactCoordinates artifactKey;
-    
-    // -- COMPARATOR
+public class ArtifactShortNameFactory {
     
-    private final static Comparator<Dependency> comparator = Comparator
-            .comparing(Dependency::getArtifactKey);
-    
-
-    @Override
-    public int compareTo(Dependency o) {
-        return comparator.compare(this, o);
+    public static String toShortName(final @NonNull ArtifactCoordinates coors) {
+        return String.format("%s:%s:%s", coors.getGroupId(), coors.getArtifactId(), coors.getVersion());
     }
-   
-
 }
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
index 9cd69a5..710e427 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
@@ -26,12 +26,17 @@ import lombok.Data;
 @Data @Builder
 public class Dependency implements Comparable<Dependency> {
     
-    private final ArtifactCoordinates artifactKey;
+    private final ArtifactCoordinates artifactCoordinates;
+    
+    /**
+     * as generated by {@link ArtifactShortNameFactory}
+     */
+    private final String shortName;  
     
     // -- COMPARATOR
     
     private final static Comparator<Dependency> comparator = Comparator
-            .comparing(Dependency::getArtifactKey);
+            .comparing(Dependency::getArtifactCoordinates);
     
 
     @Override
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
index dec5a88..c581466 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNode.java
@@ -41,7 +41,7 @@ public class ProjectNode implements Comparable<ProjectNode> {
     @EqualsAndHashCode.Exclude @ToString.Exclude 
     private final TreeSet<Dependency> dependencies = new TreeSet<Dependency>();
     
-    private final ArtifactCoordinates artifactKey;
+    private final ArtifactCoordinates artifactCoordinates;
     private final String name;
     private final String description;
     private final File projectDirectory;
@@ -63,7 +63,7 @@ public class ProjectNode implements Comparable<ProjectNode> {
     }
     
     public boolean containsOrEquals(final @NonNull ProjectNode other) {
-        if(this.getArtifactKey().equals(other.getArtifactKey())) {
+        if(this.getArtifactCoordinates().equals(other.getArtifactCoordinates())) {
             return true;
         }
         for(val child : getChildren()){
@@ -84,7 +84,7 @@ public class ProjectNode implements Comparable<ProjectNode> {
         if(other.contains(this)) {
             return 1;
         }
-        return this.getArtifactKey().compareTo(other.getArtifactKey());
+        return this.getArtifactCoordinates().compareTo(other.getArtifactCoordinates());
     }
     
    
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_gradle.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_gradle.java
index 9eb25a9..5861263 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_gradle.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_gradle.java
@@ -62,7 +62,7 @@ class ProjectNodeFactory_gradle {
         
         val projNode = ProjectNode.builder()
                 .parent(parent)
-                .artifactKey(artifactKeyOf(gradleProj))
+                .artifactCoordinates(artifactKeyOf(gradleProj))
                 .name(_Strings.nullToEmpty(gradleProj.getName()))
                 .description(_Strings.nullToEmpty(gradleProj.getDescription()))
                 .projectDirectory(gradleProj.getProjectDirectory())
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java
index e4b9f83..1d2c27a 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/ProjectNodeFactory_maven.java
@@ -67,7 +67,7 @@ class ProjectNodeFactory_maven {
             final @NonNull Model mavenProj) {
         val projNode = ProjectNode.builder()
                 .parent(parent)
-                .artifactKey(artifactCoordinatesOf(mavenProj))
+                .artifactCoordinates(artifactCoordinatesOf(mavenProj))
                 .name(_Strings.nullToEmpty(mavenProj.getName()))
                 .description(_Strings.nullToEmpty(mavenProj.getDescription()))
                 .projectDirectory(mavenProj.getProjectDirectory())
@@ -86,13 +86,16 @@ class ProjectNodeFactory_maven {
     }
     
     private static Dependency toDependency(final @NonNull org.apache.maven.model.Dependency dependency) {
+        val artifactCoordinates = ArtifactCoordinates.of(
+                dependency.getGroupId(), 
+                dependency.getArtifactId(),
+                dependency.getType(),
+                Optional.ofNullable(dependency.getVersion()).orElse("<managed>") //TODO to resolve this requires interpolation
+                );
+        
         return Dependency.builder()
-                .artifactKey(ArtifactCoordinates.of(
-                        dependency.getGroupId(), 
-                        dependency.getArtifactId(),
-                        dependency.getType(),
-                        Optional.ofNullable(dependency.getVersion()).orElse("<managed>") //TODO to resolve this requires interpolation
-                        ))
+                .artifactCoordinates(artifactCoordinates)
+                .shortName(ArtifactShortNameFactory.toShortName(artifactCoordinates))
                 .build();
     }
     
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependencies.java
similarity index 63%
copy from tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
copy to tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependencies.java
index 9cd69a5..4764995 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependencies.java
@@ -16,28 +16,18 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.projectmodel;
+package org.apache.isis.tooling.projectmodel.gradle;
 
-import java.util.Comparator;
+import java.util.Map;
+import java.util.TreeMap;
 
-import lombok.Builder;
-import lombok.Data;
+import org.apache.isis.tooling.projectmodel.Dependency;
 
-@Data @Builder
-public class Dependency implements Comparable<Dependency> {
-    
-    private final ArtifactCoordinates artifactKey;
-    
-    // -- COMPARATOR
-    
-    private final static Comparator<Dependency> comparator = Comparator
-            .comparing(Dependency::getArtifactKey);
-    
+import lombok.Data;
 
-    @Override
-    public int compareTo(Dependency o) {
-        return comparator.compare(this, o);
-    }
-   
+@Data
+public class GradleDependencies {
 
+    private final Map<String, Dependency> dependenciesByShortName = new TreeMap<>();
+    
 }
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java
new file mode 100644
index 0000000..d6ac2a4
--- /dev/null
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesFactory.java
@@ -0,0 +1,53 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.tooling.projectmodel.gradle;
+
+import java.io.File;
+
+import org.apache.isis.tooling.projectmodel.ProjectNode;
+import org.apache.isis.tooling.projectmodel.ProjectNodeFactory;
+
+import lombok.val;
+
+public class GradleDependenciesFactory {
+
+    public static GradleDependencies generateFromMaven(File projRootFolder, String rootProjectName) {
+        val projTree = ProjectNodeFactory.maven(projRootFolder);
+        return generateFromMaven(projTree, rootProjectName);
+    }
+    
+    public static GradleDependencies generateFromMaven(ProjectNode projTree, String rootProjectName) {
+        
+        val gradleDependencies = new GradleDependencies();
+        val dependenciesByShortName = gradleDependencies.getDependenciesByShortName();
+        
+        projTree.depthFirst(projModel -> {
+            
+            projModel.getDependencies().forEach(dependency->{
+                dependenciesByShortName.put(dependency.getShortName(), dependency);    
+            });
+            
+        });
+        
+        return gradleDependencies;
+    }
+    
+
+    
+}
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java
new file mode 100644
index 0000000..de06c6d
--- /dev/null
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleDependenciesWriter.java
@@ -0,0 +1,73 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package org.apache.isis.tooling.projectmodel.gradle;
+
+import java.io.StringWriter;
+import java.io.Writer;
+
+import org.apache.isis.commons.internal.base._Strings;
+
+import lombok.SneakyThrows;
+import lombok.val;
+
+public class GradleDependenciesWriter extends WriterAbstract {
+
+    public static String toString(GradleDependencies gradleDependencies) {
+        if(gradleDependencies==null) {
+            return "";
+        }
+        val adocWriter = new GradleDependenciesWriter();
+        val stringWriter = new StringWriter();
+        adocWriter.write(gradleDependencies, stringWriter);
+        return stringWriter.toString();
+    }
+
+// EXAMPLE    
+//    ext {
+//        cucumberVersion = "6.7.0"
+//        jacksonVersion = "2.11.1"
+//        Libs = [
+//                cucumberJava                    : "io.cucumber:cucumber-java:$cucumberVersion",
+//                cucumberSpring                  : "io.cucumber:cucumber-spring:$cucumberVersion",
+//                cucumberJunit                   : "io.cucumber:cucumber-junit:$cucumberVersion",
+//                jacksonDatabind                 : "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion",
+//                jacksonModuleJaxbAnnotations    : "com.fasterxml.jackson.module:jackson-module-jaxb-annotations:$jacksonVersion",
+//        ]
+//    }
+    public void write(GradleDependencies gradleDependencies, Writer writer) {
+        
+        writeWithFormat(writer, "ext {\n");
+        writeWithFormat(writer, "    Libs = [\n");
+        
+        gradleDependencies.getDependenciesByShortName().forEach((shortName, dependency)->{
+            
+            val shortNameWithPadding = _Strings.padEnd(shortName, 32, ' ');    
+        
+            writeWithFormat(writer, "        %s : \"%s\",\n", shortNameWithPadding, dependency.getArtifactCoordinates().toString());
+            
+            
+        });
+        
+        writeWithFormat(writer, "    ]\n");
+        writeWithFormat(writer, "}\n");
+    }
+    
+
+    
+}
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsFactory.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsFactory.java
index 1958ce0..ecd5fac 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsFactory.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsFactory.java
@@ -32,15 +32,19 @@ import lombok.val;
 public class GradleSettingsFactory {
 
     public static GradleSettings generateFromMaven(File projRootFolder, String rootProjectName) {
-        
         val projTree = ProjectNodeFactory.maven(projRootFolder);
-        val rootPath = _Files.canonicalPath(projRootFolder).get();
+        return generateFromMaven(projTree, rootProjectName);
+    }
+    
+    public static GradleSettings generateFromMaven(ProjectNode projTree, String rootProjectName) {
+        
+        val rootPath = _Files.canonicalPath(projTree.getProjectDirectory()).get();
         
         val gradleSettings = new GradleSettings(rootProjectName);
         val folderByArtifactKey = gradleSettings.getBuildArtifactsByArtifactKey();
         
         projTree.depthFirst(projModel -> {
-            folderByArtifactKey.put(projModel.getArtifactKey(), gradleBuildArtifactFor(projModel, rootPath));
+            folderByArtifactKey.put(projModel.getArtifactCoordinates(), gradleBuildArtifactFor(projModel, rootPath));
         });
         
         return gradleSettings;
@@ -49,7 +53,7 @@ public class GradleSettingsFactory {
     // -- HELPER
     
     private static GradleBuildArtifact gradleBuildArtifactFor(ProjectNode projModel, String rootPath) {
-        val name = toCanonicalBuildName(projModel.getArtifactKey());
+        val name = toCanonicalBuildName(projModel.getArtifactCoordinates());
         val realtivePath = toCanonicalRelativePath(projModel, rootPath);
         return GradleBuildArtifact.of(name, realtivePath, projModel.getProjectDirectory());
     }
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsWriter.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsWriter.java
index 6a07d0c..8affcc8 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsWriter.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/GradleSettingsWriter.java
@@ -21,10 +21,9 @@ package org.apache.isis.tooling.projectmodel.gradle;
 import java.io.StringWriter;
 import java.io.Writer;
 
-import lombok.SneakyThrows;
 import lombok.val;
 
-public class GradleSettingsWriter {
+public class GradleSettingsWriter extends WriterAbstract {
 
     public static String toString(GradleSettings gradleSettings) {
         if(gradleSettings==null) {
@@ -65,16 +64,6 @@ public class GradleSettingsWriter {
         });
     }
     
-    // -- HELPER
-    
-    @SneakyThrows
-    private static void writeWithFormat(Writer writer, String format, Object...args) {
-        writer.write(String.format(format, args));
-    }
-    
-    @SneakyThrows
-    private static void writeEmptyLine(Writer writer) {
-        writer.write("\n");
-    }
+
     
 }
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/WriterAbstract.java
similarity index 63%
copy from tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
copy to tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/WriterAbstract.java
index 9cd69a5..0106cd4 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
+++ b/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/gradle/WriterAbstract.java
@@ -16,28 +16,24 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.projectmodel;
+package org.apache.isis.tooling.projectmodel.gradle;
 
-import java.util.Comparator;
+import java.io.Writer;
 
-import lombok.Builder;
-import lombok.Data;
+import lombok.SneakyThrows;
 
-@Data @Builder
-public class Dependency implements Comparable<Dependency> {
-    
-    private final ArtifactCoordinates artifactKey;
-    
-    // -- COMPARATOR
+abstract class WriterAbstract {
+
+    // -- HELPER
     
-    private final static Comparator<Dependency> comparator = Comparator
-            .comparing(Dependency::getArtifactKey);
+    @SneakyThrows
+    protected static void writeWithFormat(Writer writer, String format, Object...args) {
+        writer.write(String.format(format, args));
+    }
     
-
-    @Override
-    public int compareTo(Dependency o) {
-        return comparator.compare(this, o);
+    @SneakyThrows
+    protected static void writeEmptyLine(Writer writer) {
+        writer.write("\n");
     }
-   
-
+    
 }
diff --git a/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleDependenciesTest.java b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleDependenciesTest.java
index 5eb1038..b71b626 100644
--- a/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleDependenciesTest.java
+++ b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleDependenciesTest.java
@@ -18,45 +18,30 @@
  */
 package org.apache.isis.tooling.projectmodel.test;
 
-import java.io.File;
 import java.io.IOException;
 import java.time.LocalDate;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
-import org.apache.isis.tooling.projectmodel.gradle.GradleSettings;
-import org.apache.isis.tooling.projectmodel.gradle.GradleSettingsFactory;
-import org.apache.isis.tooling.projectmodel.gradle.GradleSettingsWriter;
+import org.apache.isis.tooling.projectmodel.gradle.GradleDependencies;
+import org.apache.isis.tooling.projectmodel.gradle.GradleDependenciesFactory;
+import org.apache.isis.tooling.projectmodel.gradle.GradleDependenciesWriter;
 
-class GradleDependenciesTest {
+class GradleDependenciesTest extends ProjectModelTestAbstract {
 
-    File projRootFolder;
-    
-    @BeforeEach
-    void setUp() throws Exception {
-        projRootFolder = new File("./").getAbsoluteFile().getParentFile().getParentFile().getParentFile();
-        System.out.println("running GradleDependenciesTest at " + projRootFolder.getAbsolutePath());
-    }
-
-    @AfterEach
-    void tearDown() throws Exception {
-    }
-
-    @Test //@Disabled("activate only if you want to see the settings.gradle written to stdout")
-    void writeGradleSettingsToStdout() throws IOException {
-        GradleSettings gradleSettings = GradleSettingsFactory.generateFromMaven(projRootFolder, "isis");
-        assertNotNull(gradleSettings);
+    @Test //@Disabled("activate only if you want to see the dependencies.gradle written to stdout")
+    void writeGradleDependenciesToStdout() throws IOException {
+        GradleDependencies gradleDependencies = GradleDependenciesFactory.generateFromMaven(projRootFolder, "isis");
+        assertNotNull(gradleDependencies);
         
         System.out.println();
         System.out.println();
         System.out.println(String.format("// generated by %s", this.getClass().getName()));
         System.out.println(String.format("// date %s", LocalDate.now().toString()));
         System.out.println();
-        System.out.println(GradleSettingsWriter.toString(gradleSettings));
+        System.out.println(GradleDependenciesWriter.toString(gradleDependencies));
     }
     
 }
diff --git a/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleSettingsTest.java b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleSettingsTest.java
index 5add583..6ff7df1 100644
--- a/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleSettingsTest.java
+++ b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/GradleSettingsTest.java
@@ -26,7 +26,6 @@ import java.time.LocalDate;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
@@ -42,22 +41,16 @@ import org.apache.isis.tooling.projectmodel.gradle.GradleSettingsWriter;
 import lombok.SneakyThrows;
 import lombok.val;
 
-class GradleSettingsTest {
+class GradleSettingsTest extends ProjectModelTestAbstract {
 
-    File projRootFolder;
     boolean hasUnresolvableGradleBuildArtifacts;
     
     @BeforeEach
     void setUp() throws Exception {
-        projRootFolder = new File("./").getAbsoluteFile().getParentFile().getParentFile().getParentFile();
-        System.out.println("running GradleSettingsTest at " + projRootFolder.getAbsolutePath());
+        super.setUp();
         hasUnresolvableGradleBuildArtifacts = false;
     }
 
-    @AfterEach
-    void tearDown() throws Exception {
-    }
-
     @Test @Disabled("activate only if you want to see the settings.gradle written to stdout")
     void writeGradleSettingsToStdout() throws IOException {
         GradleSettings gradleSettings = GradleSettingsFactory.generateFromMaven(projRootFolder, "isis");
diff --git a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectModelTestAbstract.java
similarity index 62%
copy from tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
copy to tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectModelTestAbstract.java
index 9cd69a5..7401476 100644
--- a/tooling/projectmodel/src/main/java/org/apache/isis/tooling/projectmodel/Dependency.java
+++ b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectModelTestAbstract.java
@@ -16,28 +16,20 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package org.apache.isis.tooling.projectmodel;
+package org.apache.isis.tooling.projectmodel.test;
 
-import java.util.Comparator;
+import java.io.File;
 
-import lombok.Builder;
-import lombok.Data;
+import org.junit.jupiter.api.BeforeEach;
 
-@Data @Builder
-public class Dependency implements Comparable<Dependency> {
-    
-    private final ArtifactCoordinates artifactKey;
-    
-    // -- COMPARATOR
-    
-    private final static Comparator<Dependency> comparator = Comparator
-            .comparing(Dependency::getArtifactKey);
-    
+abstract class ProjectModelTestAbstract {
 
-    @Override
-    public int compareTo(Dependency o) {
-        return comparator.compare(this, o);
+    protected File projRootFolder;
+    
+    @BeforeEach
+    void setUp() throws Exception {
+        projRootFolder = new File("./").getAbsoluteFile().getParentFile().getParentFile().getParentFile();
+        // System.out.println("running GradleDependenciesTest at " + projRootFolder.getAbsolutePath()); // debug
     }
-   
-
+    
 }
diff --git a/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectTreeTest.java b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectTreeTest.java
index 94ecb5e..21f8c43 100644
--- a/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectTreeTest.java
+++ b/tooling/projectmodel/src/test/java/org/apache/isis/tooling/projectmodel/test/ProjectTreeTest.java
@@ -18,12 +18,9 @@
  */
 package org.apache.isis.tooling.projectmodel.test;
 
-import java.io.File;
 import java.util.HashSet;
 import java.util.Set;
 
-import org.junit.jupiter.api.AfterEach;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
@@ -36,20 +33,8 @@ import org.apache.isis.tooling.projectmodel.ProjectVisitor;
 
 import lombok.val;
 
-class ProjectTreeTest {
+class ProjectTreeTest extends ProjectModelTestAbstract {
     
-    File projRootFolder;
-    
-    @BeforeEach
-    void setUp() throws Exception {
-        projRootFolder = new File("./").getAbsoluteFile().getParentFile().getParentFile().getParentFile();
-        System.out.println("running ProjectTreeTest at " + projRootFolder.getAbsolutePath());
-    }
-
-    @AfterEach
-    void tearDown() throws Exception {
-    }
-
     @Test @Disabled("for now we are missing some build.gradle files")
     void testGradle() {
         
@@ -86,11 +71,11 @@ class ProjectTreeTest {
     }
     
     private static String toString(ProjectNode node) {
-        val artifactKey = node.getArtifactKey();
+        val artifactKey = node.getArtifactCoordinates();
         val groupId = artifactKey.getGroupId();
         val artifactId = artifactKey.getArtifactId();
-        val type = artifactKey.getType();
-        return String.format("%s:%s:%s", groupId, artifactId, type);
+        val packaging = artifactKey.getPackaging();
+        return String.format("%s:%s:%s", groupId, artifactId, packaging);
     }
     
     private void assertHasSomeArtifactKeys(Set<String> artifactKeys) {