You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@accumulo.apache.org by ct...@apache.org on 2022/10/24 20:04:03 UTC

[accumulo] branch main updated: Ensure bundled dependencies are listed in one place (#3039)

This is an automated email from the ASF dual-hosted git repository.

ctubbsii pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo.git


The following commit(s) were added to refs/heads/main by this push:
     new ab24a51692 Ensure bundled dependencies are listed in one place (#3039)
ab24a51692 is described below

commit ab24a516929a877ef5e64281f9a5c087280593d4
Author: Christopher Tubbs <ct...@apache.org>
AuthorDate: Mon Oct 24 16:03:57 2022 -0400

    Ensure bundled dependencies are listed in one place (#3039)
    
    Ensure the accuracy of our bundled dependencies by using one canonical
    location to define which dependencies get bundled into the binary
    tarball. With this change, the assembly descriptor that lists the
    bundled dependencies are dynamically computed from the assembly module's
    own dependencies. That way, these will never be out of sync, and we only
    have one location to update when we modify the dependencies that are
    bundled. This ensures we never bundle something we didn't intend, and
    aren't missing something we intended to bundle.
---
 assemble/pom.xml                                   | 31 ++++++++
 assemble/src/main/assemblies/binary-release.xml    |  2 +-
 assemble/src/main/assemblies/component.xml         | 83 +---------------------
 .../main/scripts/compute-assembly-components.sh    | 42 +++++++++++
 4 files changed, 75 insertions(+), 83 deletions(-)

diff --git a/assemble/pom.xml b/assemble/pom.xml
index 08061a798b..8d0ab18ae2 100644
--- a/assemble/pom.xml
+++ b/assemble/pom.xml
@@ -526,6 +526,27 @@
       </plugins>
     </pluginManagement>
     <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <!-- generate listing dependencies to bundle -->
+            <id>generate-dependencies-raw</id>
+            <goals>
+              <goal>list</goal>
+            </goals>
+            <phase>compile</phase>
+            <configuration>
+              <outputFile>${project.build.directory}/dependencies.raw.txt</outputFile>
+              <outputScope>false</outputScope>
+              <sort>true</sort>
+              <excludeGroupIds>org.apache.accumulo,com.github.spotbugs</excludeGroupIds>
+              <excludeTransitive>true</excludeTransitive>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
       <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>exec-maven-plugin</artifactId>
@@ -555,6 +576,16 @@
               <executable>src/main/scripts/create-jshell.sh</executable>
             </configuration>
           </execution>
+          <execution>
+            <id>compute-assembly-components</id>
+            <goals>
+              <goal>exec</goal>
+            </goals>
+            <phase>prepare-package</phase>
+            <configuration>
+              <executable>${basedir}/src/main/scripts/compute-assembly-components.sh</executable>
+            </configuration>
+          </execution>
         </executions>
       </plugin>
       <plugin>
diff --git a/assemble/src/main/assemblies/binary-release.xml b/assemble/src/main/assemblies/binary-release.xml
index 137c103d84..3a9178cfca 100644
--- a/assemble/src/main/assemblies/binary-release.xml
+++ b/assemble/src/main/assemblies/binary-release.xml
@@ -26,6 +26,6 @@
     <format>tar.gz</format>
   </formats>
   <componentDescriptors>
-    <componentDescriptor>src/main/assemblies/component.xml</componentDescriptor>
+    <componentDescriptor>target/assembly-components.xml</componentDescriptor>
   </componentDescriptors>
 </assembly>
diff --git a/assemble/src/main/assemblies/component.xml b/assemble/src/main/assemblies/component.xml
index 799a8d117b..04ba67f68d 100644
--- a/assemble/src/main/assemblies/component.xml
+++ b/assemble/src/main/assemblies/component.xml
@@ -30,88 +30,7 @@
       <useTransitiveDependencies>false</useTransitiveDependencies>
       <includes>
         <include>${groupId}:${artifactId}-*</include>
-        <include>com.beust:jcommander</include>
-        <include>com.fasterxml:classmate</include>
-        <include>com.fasterxml.jackson.core:jackson-annotations</include>
-        <include>com.fasterxml.jackson.core:jackson-core</include>
-        <include>com.fasterxml.jackson.core:jackson-databind</include>
-        <include>com.fasterxml.jackson.jakarta.rs:jackson-jakarta-rs-base</include>
-        <include>com.fasterxml.jackson.jakarta.rs:jackson-jakarta-rs-json-provider</include>
-        <include>com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations</include>
-        <include>com.github.ben-manes.caffeine:caffeine</include>
-        <include>com.google.code.gson:gson</include>
-        <include>com.google.guava:failureaccess</include>
-        <include>com.google.guava:guava</include>
-        <include>com.google.protobuf:protobuf-java</include>
-        <include>com.lmax:disruptor</include>
-        <include>commons-cli:commons-cli</include>
-        <include>commons-codec:commons-codec</include>
-        <include>commons-io:commons-io</include>
-        <include>commons-logging:commons-logging</include>
-        <include>com.sun.istack:istack-commons-runtime</include>
-        <include>io.micrometer:micrometer-core</include>
-        <include>io.opentelemetry:opentelemetry-api</include>
-        <include>io.opentelemetry:opentelemetry-context</include>
-        <include>io.opentelemetry:opentelemetry-semconv</include>
-        <include>jakarta.activation:jakarta.activation-api</include>
-        <include>jakarta.annotation:jakarta.annotation-api</include>
-        <include>jakarta.el:jakarta.el-api</include>
-        <include>jakarta.inject:jakarta.inject-api</include>
-        <include>jakarta.servlet:jakarta.servlet-api</include>
-        <include>jakarta.validation:jakarta.validation-api</include>
-        <include>jakarta.ws.rs:jakarta.ws.rs-api</include>
-        <include>jakarta.xml.bind:jakarta.xml.bind-api</include>
-        <include>org.apache.commons:commons-collections4</include>
-        <include>org.apache.commons:commons-configuration2</include>
-        <include>org.apache.commons:commons-lang3</include>
-        <include>org.apache.commons:commons-math3</include>
-        <include>org.apache.commons:commons-text</include>
-        <include>org.apache.commons:commons-vfs2</include>
-        <include>org.apache.datasketches:datasketches-java</include>
-        <include>org.apache.htrace:htrace-core4</include>
-        <include>org.apache.logging.log4j:log4j-1.2-api</include>
-        <include>org.apache.logging.log4j:log4j-api</include>
-        <include>org.apache.logging.log4j:log4j-core</include>
-        <include>org.apache.logging.log4j:log4j-jcl</include>
-        <include>org.apache.logging.log4j:log4j-jul</include>
-        <include>org.apache.logging.log4j:log4j-slf4j2-impl</include>
-        <include>org.apache.logging.log4j:log4j-web</include>
-        <include>org.apache.thrift:libthrift</include>
-        <include>org.eclipse.jetty:jetty-http</include>
-        <include>org.eclipse.jetty:jetty-io</include>
-        <include>org.eclipse.jetty:jetty-security</include>
-        <include>org.eclipse.jetty:jetty-server</include>
-        <include>org.eclipse.jetty:jetty-servlet</include>
-        <include>org.eclipse.jetty:jetty-util</include>
-        <include>org.freemarker:freemarker</include>
-        <include>org.glassfish.hk2:hk2-api</include>
-        <include>org.glassfish.hk2:hk2-locator</include>
-        <include>org.glassfish.hk2:hk2-utils</include>
-        <include>org.glassfish:jakarta.el</include>
-        <include>org.glassfish.jaxb:jaxb-core</include>
-        <include>org.glassfish.jaxb:jaxb-runtime</include>
-        <include>org.glassfish.jaxb:txw2</include>
-        <include>org.glassfish.jersey.containers:jersey-container-jetty-http</include>
-        <include>org.glassfish.jersey.containers:jersey-container-servlet-core</include>
-        <include>org.glassfish.jersey.containers:jersey-container-servlet</include>
-        <include>org.glassfish.jersey.core:jersey-client</include>
-        <include>org.glassfish.jersey.core:jersey-common</include>
-        <include>org.glassfish.jersey.core:jersey-server</include>
-        <include>org.glassfish.jersey.ext:jersey-bean-validation</include>
-        <include>org.glassfish.jersey.ext:jersey-entity-filtering</include>
-        <include>org.glassfish.jersey.ext:jersey-mvc-freemarker</include>
-        <include>org.glassfish.jersey.ext:jersey-mvc</include>
-        <include>org.glassfish.jersey.inject:jersey-hk2</include>
-        <include>org.glassfish.jersey.media:jersey-media-jaxb</include>
-        <include>org.glassfish.jersey.media:jersey-media-json-jackson</include>
-        <include>org.hdrhistogram:HdrHistogram</include>
-        <include>org.hibernate.validator:hibernate-validator</include>
-        <include>org.javassist:javassist</include>
-        <include>org.jboss.logging:jboss-logging</include>
-        <include>org.jline:jline</include>
-        <include>org.latencyutils:LatencyUtils</include>
-        <include>org.slf4j:slf4j-api</include>
-        <include>org.yaml:snakeyaml</include>
+        <!-- INCLUDE BUNDLED DEPS HERE -->
       </includes>
     </dependencySet>
   </dependencySets>
diff --git a/assemble/src/main/scripts/compute-assembly-components.sh b/assemble/src/main/scripts/compute-assembly-components.sh
new file mode 100755
index 0000000000..a058a2a6b4
--- /dev/null
+++ b/assemble/src/main/scripts/compute-assembly-components.sh
@@ -0,0 +1,42 @@
+#! /usr/bin/env bash
+#
+# 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
+#
+#   https://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.
+#
+
+# This script will compute the assembly-components.xml from the assembly module's dependencies
+
+in=target/dependencies.raw.txt
+template=src/main/assemblies/component.xml
+out=target/assembly-components.xml
+
+function createIncludeLines() {
+  # maven-dependency-plugin puts ANSI color sequences in the output file; strip them
+  mapfile -t dependencyArtifacts < <(sed 's/\x1b\[[0-9;]*[a-zA-Z]//g' <"$in" | grep -o '^   [a-z][^ ]*' | sed 's/^ *//')
+
+  {
+    for x in "${dependencyArtifacts[@]}"; do
+      IFS=:
+      read -ra JAR <<<"$x"
+      groupId="${JAR[0]}"
+      artifactId="${JAR[1]}"
+      echo "        <include>${groupId}:${artifactId}</include>"
+    done
+  } | sort -u | paste -sd'%'
+}
+
+sed -e "s|^.*INCLUDE BUNDLED DEPS HERE.*\$|$(createIncludeLines)|" "$template" | tr "%" "\n" >"$out"