commit:     a7f4247c96b248b86d657137bbb8312884bde5dd
Author:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
AuthorDate: Sun Nov  3 11:26:41 2019 +0000
Commit:     Miroslav Šulc <fordfrog <AT> gentoo <DOT> org>
CommitDate: Sun Nov  3 11:26:41 2019 +0000
URL:        https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=a7f4247c

added support for forcing minimal java version

Signed-off-by: Miroslav Šulc <fordfrog <AT> gentoo.org>

 src/main/java/org/gentoo/java/ebuilder/Config.java | 24 ++++++++++++++
 src/main/java/org/gentoo/java/ebuilder/Main.java   |  8 +++++
 .../gentoo/java/ebuilder/maven/MavenEbuilder.java  | 33 +++++++++++++++----
 src/main/resources/usage.txt                       | 38 ++++++++++++----------
 4 files changed, 79 insertions(+), 24 deletions(-)

diff --git a/src/main/java/org/gentoo/java/ebuilder/Config.java 
b/src/main/java/org/gentoo/java/ebuilder/Config.java
index 3bf8cb8..c53e7a9 100644
--- a/src/main/java/org/gentoo/java/ebuilder/Config.java
+++ b/src/main/java/org/gentoo/java/ebuilder/Config.java
@@ -7,6 +7,7 @@ import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import org.gentoo.java.ebuilder.maven.JavaVersion;
 
 /**
  * Container for command line configuration.
@@ -48,6 +49,11 @@ public class Config {
      * Writer for errors.
      */
     private final PrintWriter errorWriter;
+    /**
+     * JDK/JRE version that will be used if version in POM files is lower than
+     * this one.
+     */
+    private JavaVersion forceMinJavaVersion;
     /**
      * Whether ebuild should be generated.
      */
@@ -223,6 +229,24 @@ public class Config {
         return errorWriter;
     }
 
+    /**
+     * Getter for {@link #forceMinJavaVersion}.
+     *
+     * @return {@link #forceMinJavaVersion}
+     */
+    public JavaVersion getForceMinJavaVersion() {
+        return forceMinJavaVersion;
+    }
+
+    /**
+     * Setter for {@link #forceMinJavaVersion}.
+     *
+     * @param forceMinJavaVersion {@link #forceMinJavaVersion}
+     */
+    public void setForceMinJavaVersion(final JavaVersion forceMinJavaVersion) {
+        this.forceMinJavaVersion = forceMinJavaVersion;
+    }
+
     /**
      * Getter for {@link #keywords}.
      *

diff --git a/src/main/java/org/gentoo/java/ebuilder/Main.java 
b/src/main/java/org/gentoo/java/ebuilder/Main.java
index cc9a3c5..fa4a85e 100644
--- a/src/main/java/org/gentoo/java/ebuilder/Main.java
+++ b/src/main/java/org/gentoo/java/ebuilder/Main.java
@@ -11,6 +11,7 @@ import java.nio.file.Paths;
 import java.text.MessageFormat;
 import java.util.List;
 import java.util.Map;
+import org.gentoo.java.ebuilder.maven.JavaVersion;
 import org.gentoo.java.ebuilder.maven.MavenCache;
 import org.gentoo.java.ebuilder.maven.MavenEbuilder;
 import org.gentoo.java.ebuilder.maven.MavenParser;
@@ -132,6 +133,9 @@ public class Main {
         } else if (config.getEbuild() != null) {
             config.getErrorWriter().println(
                     "WARNING: Ebuild is used only when generating ebuild.");
+        } else if (config.getForceMinJavaVersion() != null) {
+            config.getErrorWriter().println("WARNING: Forcing minimum JDK/JRE "
+                    + "version applies only when generating ebuild.");
         } else if (config.getKeywords() != null) {
             config.getErrorWriter().println("WARNING: Keywords are used only "
                     + "when generating ebuild.");
@@ -231,6 +235,10 @@ public class Main {
                     config.setEbuild(Paths.get(args[i]).toAbsolutePath().
                             normalize());
                     break;
+                case "--force-min-java-version":
+                    i++;
+                    config.setForceMinJavaVersion(new JavaVersion(args[i]));
+                    break;
                 case "--generate-ebuild":
                 case "-g":
                     config.setGenerateEbuild(true);

diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java 
b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
index 53708e9..d6e3f1a 100644
--- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
+++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
@@ -144,11 +144,14 @@ public class MavenEbuilder {
      * Retrieves minimum source version from the maven projects.
      *
      * @param mavenProjects list of maven projects
+     * @param forceMinVersion optional minimum version to force
      *
      * @return minimum source version
      */
-    private String getMinSourceVersion(final List<MavenProject> mavenProjects) 
{
-        String result = null;
+    private JavaVersion getMinSourceVersion(
+            final List<MavenProject> mavenProjects,
+            final JavaVersion forceMinVersion) {
+        JavaVersion result = null;
 
         for (final MavenProject mavenProject : mavenProjects) {
             if (result == null || mavenProject.getSourceVersion().compareTo(
@@ -157,6 +160,10 @@ public class MavenEbuilder {
             }
         }
 
+        if (forceMinVersion != null && forceMinVersion.compareTo(result) > 0) {
+            return forceMinVersion;
+        }
+
         return result;
     }
 
@@ -164,11 +171,14 @@ public class MavenEbuilder {
      * Retrieves minimum target version from the maven projects.
      *
      * @param mavenProjects list of maven projects
+     * @param forceMinVersion optional minimum version to force
      *
      * @return minimum target version
      */
-    private String getMinTargetVersion(final List<MavenProject> mavenProjects) 
{
-        String result = null;
+    private JavaVersion getMinTargetVersion(
+            final List<MavenProject> mavenProjects,
+            final JavaVersion forceMinVersion) {
+        JavaVersion result = null;
 
         for (final MavenProject mavenProject : mavenProjects) {
             if (result == null || mavenProject.getTargetVersion().compareTo(
@@ -177,6 +187,10 @@ public class MavenEbuilder {
             }
         }
 
+        if (forceMinVersion != null && forceMinVersion.compareTo(result) > 0) {
+            return forceMinVersion;
+        }
+
         return result;
     }
 
@@ -284,6 +298,11 @@ public class MavenEbuilder {
             writer.print(config.getEbuild().getFileName());
         }
 
+        if (config.getForceMinJavaVersion() != null) {
+            writer.print(" --force-min-java-version ");
+            writer.print(config.getForceMinJavaVersion());
+        }
+
         writer.println();
     }
 
@@ -378,7 +397,8 @@ public class MavenEbuilder {
 
         writer.println();
         writer.print("\t>=virtual/jdk-");
-        writer.print(getMinSourceVersion(mavenProjects));
+        writer.print(getMinSourceVersion(
+                mavenProjects, config.getForceMinJavaVersion()));
 
         if (config.getDownloadUri() != null && config.getDownloadUri().
                 toString().matches("^.*?\\.(jar|zip)$")) {
@@ -418,7 +438,8 @@ public class MavenEbuilder {
 
         writer.println();
         writer.print("\t>=virtual/jre-");
-        writer.print(getMinTargetVersion(mavenProjects));
+        writer.print(getMinTargetVersion(
+                mavenProjects, config.getForceMinJavaVersion()));
 
         if (!runtimeDependencies.isEmpty()) {
             runtimeDependencies.stream().forEach((dependency) -> {

diff --git a/src/main/resources/usage.txt b/src/main/resources/usage.txt
index fc2689f..a5f7b68 100644
--- a/src/main/resources/usage.txt
+++ b/src/main/resources/usage.txt
@@ -1,25 +1,27 @@
 Usage: java-ebuilder <args>
 
 Generating ebuild:
---download-uri|-u <uri>     uri that goes to SRC_URI
---dump-projects|-d          outputs information about parsed projects (useful
-                            for debugging)
---ebuild|-e <file>          path to ebuild that should be created
---generate-ebuild|-g        generates ebuild from pom.xml
---keywords|-k <keywords>    arch keywords
---license|-l <license>      license name
---pom|-p <file>             path to pom.xml that should be parsed, the path 
must
-                            be relative to workdir (can be specified multiple
-                            times)
---slot|-s  <slot>           SLOT number
---workdir|-w <dir>          path to ebuild workdir (${WORKDIR}, default is
-                            current directory)
+--download-uri|-u <uri>            uri that goes to SRC_URI
+--dump-projects|-d                 outputs information about parsed projects
+                                   (useful for debugging)
+--ebuild|-e <file>                 path to ebuild that should be created
+--force-min-java-version <version> force minimum JDK/JRE version in 
dependencies
+--generate-ebuild|-g               generates ebuild from pom.xml
+--keywords|-k <keywords>           arch keywords
+--license|-l <license>             license name
+--pom|-p <file>                    path to pom.xml that should be parsed,
+                                   the path must be relative to workdir (can be
+                                   specified multiple times)
+--slot|-s  <slot>                  SLOT number
+--workdir|-w <dir>                 path to ebuild workdir (${WORKDIR}, default
+                                   is current directory)
 
 Refreshing cache:
---portage-tree|-t           path to portage tree that should be parsed when
-                            refreshing cache (default is /usr/portage)
---refresh-cache|-c          refreshes java ebuild cache
+--portage-tree|-t                  path to portage tree that should be parsed
+                                   when refreshing cache (default is
+                                   /usr/portage)
+--refresh-cache|-c                 refreshes java ebuild cache
 
 Common:
---cache-file               location of cache file (default is
-                            ~/.java-ebuilder/cache)
+--cache-file                      location of cache file (default is
+                                   ~/.java-ebuilder/cache)

Reply via email to