From 3c816ce40c84791ac55f4bbe037e2da366e3e1e5 Mon Sep 17 00:00:00 2001 From: zongyu Date: Wed, 1 Jul 2020 22:07:24 +0800 Subject: initial support for Maven Central Distributed Source jars new CLI switch: --from-maven-central Signed-off-by: zongyu --- src/main/java/org/gentoo/java/ebuilder/Config.java | 22 ++++++++ src/main/java/org/gentoo/java/ebuilder/Main.java | 3 + .../gentoo/java/ebuilder/maven/MavenEbuilder.java | 64 ++++++++++++++++++++-- 3 files changed, 85 insertions(+), 4 deletions(-) diff --git a/src/main/java/org/gentoo/java/ebuilder/Config.java b/src/main/java/org/gentoo/java/ebuilder/Config.java index c53e7a9..53af30f 100644 --- a/src/main/java/org/gentoo/java/ebuilder/Config.java +++ b/src/main/java/org/gentoo/java/ebuilder/Config.java @@ -54,6 +54,10 @@ public class Config { * this one. */ private JavaVersion forceMinJavaVersion; + /** + * Whethe the source code is distributed by Maven Central + */ + private boolean fromMavenCentral; /** * Whether ebuild should be generated. */ @@ -373,6 +377,24 @@ public class Config { this.dumpProjects = dumpProjects; } + /** + * Getter for {@link #fromMavenCentral}. + * + * @return {@link #fromMavenCentral} + */ + public boolean isFromMavenCentral() { + return fromMavenCentral; + } + + /** + * Setter for {@link #fromMavenCentral}. + * + * @param fromMavenCentral {@link #fromMavenCentral} + */ + public void setFromMavenCentral(final boolean fromMavenCentral) { + this.fromMavenCentral = fromMavenCentral; + } + /** * Getter for {@link #generateEbuild}. * diff --git a/src/main/java/org/gentoo/java/ebuilder/Main.java b/src/main/java/org/gentoo/java/ebuilder/Main.java index fa4a85e..0b4eff6 100644 --- a/src/main/java/org/gentoo/java/ebuilder/Main.java +++ b/src/main/java/org/gentoo/java/ebuilder/Main.java @@ -239,6 +239,9 @@ public class Main { i++; config.setForceMinJavaVersion(new JavaVersion(args[i])); break; + case "--from-maven-central": + config.setFromMavenCentral(true); + 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 f17f860..0387120 100644 --- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java +++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java @@ -26,12 +26,12 @@ public class MavenEbuilder { * Pattern for retrieval of tarball extension. */ private static final Pattern PATTERN_TARBALL_EXTENSION = Pattern.compile( - "^.*((?:\\.tar)\\.\\S+)$"); + "^.*((?:\\.tar)\\.\\S+|(?:\\.jar))$"); /** * Pattern for checking whether download tarball name matches expected name. */ private static final Pattern PATTERN_TARBALL_NAME - = Pattern.compile("^.*/\\$\\{P\\}(?:\\.tar)\\.\\S+$"); + = Pattern.compile("^.*/\\$\\{P\\}((?:\\.tar)\\.\\S+|(?:\\.jar))$"); /** * Generates ebuild from the collected information at the specified path. @@ -235,6 +235,41 @@ public class MavenEbuilder { return srcUri + " -> " + "${P}" + matcher.group(1); } + /** + * If the tarball name does not match pattern ${P}-test.ext then we will update + * it to store the tarball as ${P}-test.ext. + * + * @param TestSrcUri source test URI + * + * @return either original source test URI or updated source test URI + private String improveTestSrcUri(final String TestSrcUri) { + if (PATTERN_TEST_TARBALL_NAME.matcher(TestSrcUri).matches()) { + return TestSrcUri; + } + + final Matcher matcher = PATTERN_TARBALL_EXTENSION.matcher(TestSrcUri); + + /** + * We do not know how to get the extension so we will leave the tarball + * name as it is. + / + if (!matcher.matches()) { + return TestSrcUri; + } + + return TestSrcUri + " -> " + "${P}-test" + matcher.group(1); + } + */ + + /** + * Merges maven project system dependencies of specified type and removed + * duplicates. + * + * @param mavenProjects list of maven projects + * @param type type of dependencies ("common", "compile", "runtime" + * and "test") + * + * @return list of merged dependencies /** * Merges maven project system dependencies of specified type and removed * duplicates. @@ -702,12 +737,10 @@ public class MavenEbuilder { writer.println('"'); } - /* writer.print("JAVA_SRC_DIR=\""); writer.print(replaceWithVars(config.getWorkdir().relativize( mavenProject.getSourceDirectory()).toString(), config)); writer.println('"'); - */ if (mavenProject.getMainClass() != null) { writer.print("JAVA_MAIN_CLASS=\""); @@ -778,6 +811,11 @@ public class MavenEbuilder { writer.println(')'); } } + + if (config.isFromMavenCentral()) { + writeMavenUnpack(mavenProject, writer); + } + } /** @@ -789,4 +827,22 @@ public class MavenEbuilder { writer.println(); writer.println("S=\"${WORKDIR}\""); } + + /** + * modify src_unpack() if we use Maven distributed source codes. + * + * @param writer ebuild writer + */ + private void writeMavenUnpack(final MavenProject mavenProject, + final PrintWriter writer) { + writer.println(); + writer.println("src_unpack() {"); + writer.println("\tmkdir -p ${S}/${JAVA_SRC_DIR}"); + writer.println("\tunzip ${DISTDIR}/${P}.jar -d ${S}/${JAVA_SRC_DIR}"); + if (mavenProject.hasTests()) { + writer.println("\tmkdir -p ${JAVA_TEST_SRC_DIR}"); + writer.println("\tunzip ${DISTDIR}/${P}-test.jar -d ${S}/${JAVA_TEST_SRC_DIR}"); + } + writer.println("}"); + } } -- cgit v1.2.3-65-gdbad