This is an automated email from the ASF dual-hosted git repository. benjobs pushed a commit to branch maven_wrapper in repository https://gitbox.apache.org/repos/asf/incubator-streampark.git
commit fcffd344b31ddbe1d2bfaf38f242584298c05310 Author: benjobs <[email protected]> AuthorDate: Sat Dec 2 12:12:34 2023 +0800 [Improve] mavenWrapper improvement --- .mvn/wrapper/MavenWrapperHelper.java | 38 ++++-- .mvn/wrapper/maven-wrapper.properties | 1 + build.sh | 20 ---- mvnw | 129 ++++++++++++--------- .../streampark/console/core/entity/Project.java | 10 -- 5 files changed, 108 insertions(+), 90 deletions(-) diff --git a/.mvn/wrapper/MavenWrapperHelper.java b/.mvn/wrapper/MavenWrapperHelper.java index 3772b1d7b..8d24566aa 100644 --- a/.mvn/wrapper/MavenWrapperHelper.java +++ b/.mvn/wrapper/MavenWrapperHelper.java @@ -15,6 +15,8 @@ * limitations under the License. */ +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Authenticator; @@ -24,8 +26,9 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.StandardCopyOption; +import java.security.MessageDigest; import java.util.Arrays; -import java.util.jar.JarFile; +import java.util.Properties; public final class MavenWrapperHelper { @@ -33,7 +36,7 @@ public final class MavenWrapperHelper { private static final boolean VERBOSE = Boolean.parseBoolean(System.getenv("MVNW_VERBOSE")); - public static void main(String[] args) { + public static void main(String[] args) throws Exception { String action = args[0].toLowerCase(); String[] actionArgs = Arrays.copyOfRange(args, 1, args.length); switch (action) { @@ -60,12 +63,16 @@ public final class MavenWrapperHelper { break; case "verify": String wrapperJar = actionArgs[0]; + String propertiesPath = actionArgs[1]; log("maven-wrapper file checking: " + wrapperJar); - try (JarFile ignored = new JarFile(wrapperJar, true)) { - System.exit(0); - } catch (Exception e) { - System.exit(1); + Properties properties = new Properties(); + properties.load(Files.newInputStream(new File(propertiesPath).toPath())); + String wrapperMd5 = properties.getProperty("wrapperMd5"); + if (wrapperMd5 == null) { + System.err.println("wrapperMd5 not in " + propertiesPath); } + String fileMd5 = getFileMd5(wrapperJar); + System.exit(wrapperMd5.equals(fileMd5) ? 0 : 1); default: throw new UnsupportedOperationException("Unknown action \"" + action + "\"."); } @@ -90,9 +97,26 @@ public final class MavenWrapperHelper { log(" - Downloader complete"); } + public static String getFileMd5(String path) throws Exception { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + try (FileInputStream inputStream = new FileInputStream(path)) { + byte[] buffer = new byte[1024]; + int len; + while ((len = inputStream.read(buffer)) != -1) { + md5.update(buffer, 0, len); + } + byte[] byteArray = md5.digest(); + StringBuilder sb = new StringBuilder(); + for (byte b : byteArray) { + sb.append(String.format("%02x", b)); + } + return sb.toString(); + } + } + private static void log(String msg) { if (VERBOSE) { System.out.println(msg); } } -} \ No newline at end of file +} diff --git a/.mvn/wrapper/maven-wrapper.properties b/.mvn/wrapper/maven-wrapper.properties index fde9af104..e42c9fef2 100644 --- a/.mvn/wrapper/maven-wrapper.properties +++ b/.mvn/wrapper/maven-wrapper.properties @@ -17,3 +17,4 @@ distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar +wrapperMd5=6058337c6ed4603858c3b72f754efa9b diff --git a/build.sh b/build.sh index d04e04887..d5ff63653 100755 --- a/build.sh +++ b/build.sh @@ -205,26 +205,6 @@ build() { please visit: https://streampark.apache.org/docs/user-guide/deployment for more detail. \n""" fi - else - javaSource="$PRG_DIR/.mvn/wrapper/MavenWrapperHelper.java" - javaClass="$PRG_DIR/.mvn/wrapper/MavenWrapperHelper.class" - wrapperJarPath="$PRG_DIR/.mvn/wrapper/maven-wrapper.jar" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaSource=$(cygpath --path --windows "$javaSource") - javaClass=$(cygpath --path --windows "$javaClass") - fi - if [ -e "$javaSource" ]; then - [ ! -e "$javaClass" ] && ("$JAVA_HOME/bin/javac" "$javaSource") - if [ -e "$javaClass" ]; then - ("$JAVA_HOME/bin/java" -cp "$PRG_DIR/.mvn/wrapper" MavenWrapperHelper "verify" "$wrapperJarPath") - if [ $? -eq 1 ]; then - echo_r "Error: $wrapperJarPath is invalid. retry download it and build project again..." - rm -f $wrapperJarPath - build $scalaArg $modeArg - fi - fi - fi fi fi } diff --git a/mvnw b/mvnw index 916dee8a3..d5a26d254 100755 --- a/mvnw +++ b/mvnw @@ -188,64 +188,87 @@ log "$MAVEN_PROJECTBASEDIR" # This allows using the maven wrapper in projects that prohibit checking in binary data. ########################################################################################## wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" +javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperHelper.java" +javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperHelper.class" +wrapperProperties="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +# For Cygwin, switch paths to Windows format before running javac +if $cygwin; then + javaSource=$(cygpath --path --windows "$javaSource") + javaClass=$(cygpath --path --windows "$javaClass") +fi + +if [ ! -e "$javaSource" ]; then + error "ERROR: $javaSource not exists." + exit 1 +fi + +if [ ! -e "$javaClass" ]; then + log " - Compiling $javaClass starting ..." + ("$JAVA_HOME/bin/javac" "$javaSource") +fi + if [ -r "$wrapperJarPath" ]; then - log "Found $wrapperJarPath" -else - log "Couldn't find $wrapperJarPath, downloading it ..." + log "Found $wrapperJarPath" + log "Check found $wrapperJarPath starting" + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperHelper "verify" "$wrapperJarPath" "$wrapperProperties") + if [ $? -eq 1 ]; then + echo "WARN: Check found $wrapperJarPath invalided." + rm -f $wrapperJarPath + fi +fi - if [ -n "$MVNW_REPOURL" ]; then - wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" +if [ ! -e "$wrapperJarPath" ]; then + log " - downloading wrapperJar ..." + if [ -n "$MVNW_REPOURL" ]; then + wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + else + wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + fi + while IFS="=" read -r key value; do + # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) + safeValue=$(echo "$value" | tr -d '\r') + case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; + esac + done < $wrapperProperties + log "Downloading from: $wrapperUrl" + + if $cygwin; then + wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") + fi + + if command -v wget > /dev/null; then + log "Found wget ... using wget" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" else - wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar" + wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" fi - while IFS="=" read -r key value; do - # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' ) - safeValue=$(echo "$value" | tr -d '\r') - case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;; - esac - done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" - log "Downloading from: $wrapperUrl" - - if $cygwin; then - wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath") - fi - - if command -v wget > /dev/null; then - log "Found wget ... using wget" - [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet" - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" - else - wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - log "Found curl ... using curl" - [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" - else - curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" - fi + elif command -v curl > /dev/null; then + log "Found curl ... using curl" + [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent" + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" else - log "Falling back to using Java to download" - javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperHelper.java" - javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperHelper.class" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaSource=$(cygpath --path --windows "$javaSource") - javaClass=$(cygpath --path --windows "$javaClass") - fi - if [ -e "$javaSource" ]; then - if [ ! -e "$javaClass" ]; then - log " - Compiling MavenWrapperHelper.java ..." - ("$JAVA_HOME/bin/javac" "$javaSource") - fi - if [ -e "$javaClass" ]; then - log " - Running MavenWrapperHelper.java ..." - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperHelper "download" "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath" - fi - fi + curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath" fi + else + log "Falling back to using Java to download" + log " - Running MavenWrapperHelper.java ..." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperHelper "download" "$wrapperUrl" "$wrapperJarPath") + if [ $? -ne 0 ]; then + rm -f "$wrapperJarPath" + echo "ERROR: download wrapperJar by Java failed, please retry" + exit 1; + fi + fi + + log "Check $wrapperJarPath." + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperHelper "verify" "$wrapperJarPath" "$wrapperProperties") + if [ $? -eq 1 ]; then + echo "ERROR: Check $wrapperJarPath invalided, please retry" + exit 1 + fi fi ########################################################################################## # End of extension @@ -256,7 +279,7 @@ wrapperSha256Sum="" while IFS="=" read -r key value; do case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;; esac -done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties" +done < $wrapperProperties if [ -n "$wrapperSha256Sum" ]; then wrapperSha256Result=false if command -v sha256sum > /dev/null; then diff --git a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java index aaa6d2970..316daf87a 100644 --- a/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java +++ b/streampark-console/streampark-console-service/src/main/java/org/apache/streampark/console/core/entity/Project.java @@ -47,7 +47,6 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; -import java.util.jar.JarFile; import java.util.stream.Collectors; @Slf4j @@ -202,15 +201,6 @@ public class Project implements Serializable { try { CommandUtils.execute(mvn + " --version"); } catch (Exception e) { - File wrapperJar = new File(WebUtils.getAppHome().concat("/.mvn/wrapper/maven-wrapper.jar")); - if (wrapperJar.exists()) { - try { - JarFile jarFile = new JarFile(wrapperJar, true); - jarFile.close(); - } catch (Exception ignored) { - FileUtils.deleteQuietly(wrapperJar); - } - } if (windows) { mvn = WebUtils.getAppHome().concat("/bin/mvnw.cmd"); } else {
