From a7f4247c96b248b86d657137bbb8312884bde5dd Mon Sep 17 00:00:00 2001 From: Miroslav Šulc Date: Sun, 3 Nov 2019 12:26:41 +0100 Subject: added support for forcing minimal java version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Miroslav Šulc --- 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 mavenProjects) { - String result = null; + private JavaVersion getMinSourceVersion( + final List 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 mavenProjects) { - String result = null; + private JavaVersion getMinTargetVersion( + final List 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 Generating ebuild: ---download-uri|-u uri that goes to SRC_URI ---dump-projects|-d outputs information about parsed projects (useful - for debugging) ---ebuild|-e path to ebuild that should be created ---generate-ebuild|-g generates ebuild from pom.xml ---keywords|-k arch keywords ---license|-l license name ---pom|-p path to pom.xml that should be parsed, the path must - be relative to workdir (can be specified multiple - times) ---slot|-s SLOT number ---workdir|-w path to ebuild workdir (${WORKDIR}, default is - current directory) +--download-uri|-u uri that goes to SRC_URI +--dump-projects|-d outputs information about parsed projects + (useful for debugging) +--ebuild|-e path to ebuild that should be created +--force-min-java-version force minimum JDK/JRE version in dependencies +--generate-ebuild|-g generates ebuild from pom.xml +--keywords|-k arch keywords +--license|-l license name +--pom|-p path to pom.xml that should be parsed, + the path must be relative to workdir (can be + specified multiple times) +--slot|-s SLOT number +--workdir|-w 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) -- cgit v1.2.3-65-gdbad