Skip to content

Commit 4c3b2b8

Browse files
authoredJan 10, 2024
SNOW-831250: Create thin jar (snowflakedb#1586)
1 parent 42f377a commit 4c3b2b8

File tree

9 files changed

+509
-6
lines changed

9 files changed

+509
-6
lines changed
 

‎.github/workflows/build-test.yml

+3-1
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,15 @@ jobs:
3232

3333
test-linux:
3434
needs: build
35-
name: ${{ matrix.cloud }} JDBC ${{ matrix.category }} on ${{ matrix.image }}
35+
name: ${{ matrix.cloud }} JDBC${{ matrix.additionalMavenProfile }} ${{ matrix.category }} on ${{ matrix.image }}
3636
runs-on: ubuntu-latest
3737
strategy:
3838
fail-fast: false
3939
matrix:
4040
image: [ 'jdbc-centos7-openjdk8', 'jdbc-centos7-openjdk11', 'jdbc-centos7-openjdk17' ]
4141
cloud: [ 'AWS' ]
4242
category: ['TestCategoryResultSet,TestCategoryOthers,TestCategoryLoader', 'TestCategoryConnection,TestCategoryStatement', 'TestCategoryArrow,TestCategoryCore', 'TestCategoryFips']
43+
additionalMavenProfile: ['', '-Dthin-jar']
4344
steps:
4445
- uses: actions/checkout@v1
4546
- name: Tests
@@ -49,6 +50,7 @@ jobs:
4950
CLOUD_PROVIDER: ${{ matrix.cloud }}
5051
TARGET_DOCKER_TEST_IMAGE: ${{ matrix.image }}
5152
JDBC_TEST_CATEGORY: ${{ matrix.category }}
53+
ADDITIONAL_MAVEN_PROFILE: ${{ matrix.additionalMavenProfile }}
5254
run: ./ci/test.sh
5355

5456
test-linux-old-driver:

‎README.rst

+11
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,17 @@ You may import the coding style from IntelliJ so that the coding style can be ap
111111
- Enable `google-java-format` for the JDBC project.
112112
- In the source code window, select **Code** -> **Reformat** to apply the coding style.
113113

114+
Thin Jar
115+
========
116+
117+
To build a thin jar run command:
118+
119+
.. code-block:: bash
120+
121+
mvn clean verify -Dthin-jar -Dnot-self-contained-jar
122+
123+
- `thin-jar` enables thin jar profile
124+
- `not-self-contained-jar` turns off fat jar profile (enabled by default)
114125

115126
Tests
116127
=====

‎ci/container/test_component.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ for c in "${CATEGORY[@]}"; do
104104
-Djacoco.skip.instrument=false \
105105
-DtestCategory=net.snowflake.client.category.$c \
106106
-Dorg.slf4j.simpleLogger.log.org.apache.maven.cli.transfer.Slf4jMavenTransferListener=warn \
107-
-Dnot-self-contained-jar \
107+
-Dnot-self-contained-jar $ADDITIONAL_MAVEN_PROFILE \
108108
verify \
109109
--batch-mode --show-version
110110
fi

‎ci/scripts/check_content.sh

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@
22

33
# scripts used to check if all dependency is shaded into snowflake internal path
44

5+
package_modifier=$1
6+
57
set -o pipefail
68

79
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )"
810

9-
if jar tvf $DIR/../../target/snowflake-jdbc.jar | awk '{print $8}' | grep -v -E "^(net|com)/snowflake" | grep -v -E "(com|net)/\$" | grep -v -E "^META-INF" | grep -v -E "^mozilla" | grep -v -E "^com/sun/jna" | grep -v com/sun/ | grep -v mime.types; then
11+
if jar tvf $DIR/../../target/snowflake-jdbc${package_modifier}.jar | awk '{print $8}' | grep -v -E "^(net|com)/snowflake" | grep -v -E "(com|net)/\$" | grep -v -E "^META-INF" | grep -v -E "^mozilla" | grep -v -E "^com/sun/jna" | grep -v com/sun/ | grep -v mime.types; then
1012
echo "[ERROR] JDBC jar includes class not under the snowflake namespace"
1113
exit 1
1214
fi

‎ci/test.sh

+1
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ for name in "${!TARGET_TEST_IMAGES[@]}"; do
5757
-e JOB_NAME \
5858
-e BUILD_NUMBER \
5959
-e JDBC_TEST_CATEGORY \
60+
-e ADDITIONAL_MAVEN_PROFILE \
6061
-e is_old_driver \
6162
--add-host=snowflake.reg.local:${IP_ADDR} \
6263
--add-host=s3testaccount.reg.local:${IP_ADDR} \

‎pom.xml

+196-2
Original file line numberDiff line numberDiff line change
@@ -10,18 +10,23 @@
1010
<relativePath>./parent-pom.xml</relativePath>
1111
</parent>
1212

13-
<artifactId>snowflake-jdbc</artifactId>
13+
<!-- Maven complains about using property here, but it makes install and deploy process easier to override final package names and localization -->
14+
<artifactId>${artifactId}</artifactId>
1415
<version>3.14.4</version>
1516
<packaging>jar</packaging>
1617

17-
<name>snowflake-jdbc</name>
18+
<name>${artifactId}</name>
1819
<url>https://github.com/snowflakedb/snowflake-jdbc</url>
1920

2021
<scm>
2122
<connection>scm:git:https://github.com/snowflakedb/snowflake-jdbc.git</connection>
2223
<url>https://github.com/snowflakedb/snowflake-jdbc</url>
2324
</scm>
2425

26+
<properties>
27+
<artifactId>snowflake-jdbc</artifactId>
28+
</properties>
29+
2530
<dependencies>
2631
<dependency>
2732
<groupId>org.bouncycastle</groupId>
@@ -578,6 +583,195 @@
578583
</plugins>
579584
</build>
580585
</profile>
586+
<profile>
587+
<id>thin-jar</id>
588+
<activation>
589+
<property>
590+
<name>thin-jar</name>
591+
</property>
592+
</activation>
593+
<properties>
594+
<artifactId>snowflake-jdbc-thin</artifactId>
595+
</properties>
596+
<build>
597+
<plugins>
598+
<plugin>
599+
<!-- we don't want to run japicmp for thin-jar until we release it for the first time -->
600+
<groupId>com.github.siom79.japicmp</groupId>
601+
<artifactId>japicmp-maven-plugin</artifactId>
602+
<executions>
603+
<execution>
604+
<id>japicmp</id>
605+
<goals>
606+
<goal>cmp</goal>
607+
</goals>
608+
<phase>none</phase>
609+
</execution>
610+
</executions>
611+
</plugin>
612+
<plugin>
613+
<!-- relocate the META-INF/versions files manually due to the maven bug -->
614+
<!-- https://issues.apache.org/jira/browse/MSHADE-406 -->
615+
<groupId>org.apache.maven.plugins</groupId>
616+
<artifactId>maven-antrun-plugin</artifactId>
617+
<executions>
618+
<execution>
619+
<id>repack</id>
620+
<goals>
621+
<goal>run</goal>
622+
</goals>
623+
<phase>package</phase>
624+
<configuration>
625+
<target>
626+
<unzip dest="${project.build.directory}/relocate" src="${project.build.directory}/${project.build.finalName}.jar"/>
627+
<mkdir dir="${project.build.directory}/relocate/META-INF/versions/9/${relocationBase}"/>
628+
<mkdir dir="${project.build.directory}/relocate/META-INF/versions/11/${relocationBase}"/>
629+
<mkdir dir="${project.build.directory}/relocate/META-INF/versions/15/${relocationBase}"/>
630+
<zip basedir="${project.build.directory}/relocate" destfile="${project.build.directory}/${project.build.finalName}.jar"/>
631+
<delete dir="${project.build.directory}/relocate/META-INF/versions/9/${relocationBase}"/>
632+
<delete dir="${project.build.directory}/relocate/META-INF/versions/11/${relocationBase}"/>
633+
<delete dir="${project.build.directory}/relocate/META-INF/versions/15/${relocationBase}"/>
634+
</target>
635+
</configuration>
636+
</execution>
637+
</executions>
638+
</plugin>
639+
<plugin>
640+
<!-- google linkage checker doesn't work well with shaded jar, disable the check in this case for now -->
641+
<groupId>org.apache.maven.plugins</groupId>
642+
<artifactId>maven-enforcer-plugin</artifactId>
643+
<executions>
644+
<execution>
645+
<id>enforce-linkage-checker</id>
646+
<goals>
647+
<goal>enforce</goal>
648+
</goals>
649+
<phase>none</phase>
650+
</execution>
651+
</executions>
652+
</plugin>
653+
<plugin>
654+
<groupId>org.apache.maven.plugins</groupId>
655+
<artifactId>maven-shade-plugin</artifactId>
656+
<configuration/>
657+
<executions>
658+
<execution>
659+
<goals>
660+
<goal>shade</goal>
661+
</goals>
662+
<phase>package</phase>
663+
<configuration>
664+
<artifactSet>
665+
<includes>
666+
<include>net.snowflake:snowflake-common</include>
667+
<include>org.apache.arrow:*</include>
668+
<include>org.apache.tika:tika-core</include>
669+
<include>io.netty:*</include>
670+
</includes>
671+
</artifactSet>
672+
<relocations>
673+
<!-- We list only packages that we need to include form dependencies + snowflake-common-->
674+
<relocation>
675+
<pattern>net.snowflake.common</pattern>
676+
<shadedPattern>${shadeBase}.snowflake.common</shadedPattern>
677+
</relocation>
678+
<relocation>
679+
<pattern>org.apache.arrow</pattern>
680+
<shadedPattern>${shadeBase}.apache.arrow</shadedPattern>
681+
</relocation>
682+
<relocation>
683+
<pattern>org.apache.tika</pattern>
684+
<shadedPattern>${shadeBase}.apache.tika</shadedPattern>
685+
</relocation>
686+
<!-- io.netty are dependencies for arrow and arrow packages have some of the io.netty classes internally -->
687+
<relocation>
688+
<pattern>io.netty</pattern>
689+
<shadedPattern>${shadeBase}.io.netty</shadedPattern>
690+
</relocation>
691+
</relocations>
692+
<filters>
693+
<filter>
694+
<artifact>*:*</artifact>
695+
<excludes>
696+
<exclude>META-INF/LICENSE*</exclude>
697+
<exclude>META-INF/NOTICE*</exclude>
698+
<exclude>META-INF/DEPENDENCIES</exclude>
699+
<exclude>META-INF/maven/**</exclude>
700+
<exclude>META-INF/services/com.fasterxml.*</exclude>
701+
<exclude>META-INF/*.xml</exclude>
702+
<exclude>META-INF/*.SF</exclude>
703+
<exclude>META-INF/*.DSA</exclude>
704+
<exclude>META-INF/*.RSA</exclude>
705+
<exclude>.netbeans_automatic_build</exclude>
706+
<exclude>git.properties</exclude>
707+
<exclude>arrow-git.properties</exclude>
708+
<exclude>google-http-client.properties</exclude>
709+
<exclude>storage.v1.json</exclude>
710+
<!-- This is just a documentation file, not needed-->
711+
<exclude>pipes-fork-server-default-log4j2.xml</exclude>
712+
<exclude>dependencies.properties</exclude>
713+
<exclude>pipes-fork-server-default-log4j2.xml</exclude>
714+
</excludes>
715+
</filter>
716+
<filter>
717+
<artifact>org.apache.arrow:arrow-vector</artifact>
718+
<excludes>
719+
<!-- codegen directory is used to generate java code for arrow vector package. Excludes them since we only need class file -->
720+
<exclude>codegen/**</exclude>
721+
</excludes>
722+
</filter>
723+
</filters>
724+
<transformers>
725+
<transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
726+
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"/>
727+
</transformers>
728+
</configuration>
729+
</execution>
730+
</executions>
731+
</plugin>
732+
<plugin>
733+
<groupId>org.codehaus.mojo</groupId>
734+
<artifactId>buildnumber-maven-plugin</artifactId>
735+
<configuration>
736+
<timestampFormat>yyyyMMddHHmmss</timestampFormat>
737+
<timestampPropertyName>buildNumber.timestamp</timestampPropertyName>
738+
<doCheck>false</doCheck>
739+
<revisionOnScmFailure/>
740+
<doUpdate>false</doUpdate>
741+
<!--- Note for those who come later. If you specify "buildNumber" in the items field, it becomes an incrementing buildNumber
742+
AFAIK (and I spent a lot of time on this) it is impossible to get the SCM rev number and incrementing build number at the same time -->
743+
</configuration>
744+
<executions>
745+
<execution>
746+
<goals>
747+
<goal>create-timestamp</goal>
748+
</goals>
749+
<phase>package</phase>
750+
</execution>
751+
</executions>
752+
</plugin>
753+
<plugin>
754+
<groupId>org.codehaus.mojo</groupId>
755+
<artifactId>exec-maven-plugin</artifactId>
756+
<executions>
757+
<execution>
758+
<id>check-shaded-content</id>
759+
<goals>
760+
<goal>exec</goal>
761+
</goals>
762+
<phase>verify</phase>
763+
<configuration>
764+
<executable>${basedir}/ci/scripts/check_content.sh</executable>
765+
<arguments>
766+
<argument>-thin</argument>
767+
</arguments>
768+
</configuration>
769+
</execution>
770+
</executions>
771+
</plugin>
772+
</plugins>
773+
</build>
774+
</profile>
581775
<profile>
582776
<id>self-contained-jar</id>
583777
<activation>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
/*
2+
* Copyright (c) 2012-2024 Snowflake Computing Inc. All right reserved.
3+
*/
4+
package net.snowflake.client;
5+
6+
/** Skip tests on CI when thin jar is tested */
7+
public class SkipOnThinJar implements ConditionalIgnoreRule.IgnoreCondition {
8+
@Override
9+
public boolean isSatisfied() {
10+
return "-Dthin-jar".equals(TestUtil.systemGetEnv("ADDITIONAL_MAVEN_PROFILE"));
11+
}
12+
}

‎src/test/java/net/snowflake/client/core/SFArrowResultSetIT.java

+15-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import java.sql.Statement;
1818
import java.time.Instant;
1919
import java.util.*;
20+
import net.snowflake.client.ConditionalIgnoreRule;
21+
import net.snowflake.client.SkipOnThinJar;
2022
import net.snowflake.client.category.TestCategoryArrow;
2123
import net.snowflake.client.jdbc.*;
2224
import net.snowflake.client.jdbc.telemetry.NoOpTelemetryClient;
@@ -41,16 +43,24 @@
4143

4244
@Category(TestCategoryArrow.class)
4345
public class SFArrowResultSetIT {
46+
47+
/** Necessary to conditional ignore tests */
48+
@Rule public ConditionalIgnoreRule rule = new ConditionalIgnoreRule();
49+
4450
private Random random = new Random();
4551

46-
/** allocator for arrow */
52+
/**
53+
* allocator for arrow RootAllocator is shaded so it cannot be overridden when testing thin or fat
54+
* jar
55+
*/
4756
protected BufferAllocator allocator = new RootAllocator(Long.MAX_VALUE);
4857

4958
/** temporary folder to store result files */
5059
@Rule public TemporaryFolder resultFolder = new TemporaryFolder();
5160

5261
/** Test the case that all results are returned in first chunk */
5362
@Test
63+
@ConditionalIgnoreRule.ConditionalIgnore(condition = SkipOnThinJar.class)
5464
public void testNoOfflineData() throws Throwable {
5565
List<Field> fieldList = new ArrayList<>();
5666
Map<String, String> customFieldMeta = new HashMap<>();
@@ -112,6 +122,7 @@ public void testEmptyResultSet() throws Throwable {
112122

113123
/** Testing the case that all data comes from chunk downloader */
114124
@Test
125+
@ConditionalIgnoreRule.ConditionalIgnore(condition = SkipOnThinJar.class)
115126
public void testOnlyOfflineData() throws Throwable {
116127
final int colCount = 2;
117128
final int chunkCount = 10;
@@ -161,6 +172,7 @@ public void testOnlyOfflineData() throws Throwable {
161172

162173
/** Testing the case that all data comes from chunk downloader */
163174
@Test
175+
@ConditionalIgnoreRule.ConditionalIgnore(condition = SkipOnThinJar.class)
164176
public void testFirstResponseAndOfflineData() throws Throwable {
165177
final int colCount = 2;
166178
final int chunkCount = 10;
@@ -553,6 +565,7 @@ private void writeTimestampStructToField(
553565

554566
/** Test that first chunk containing struct vectors (used for timestamps) can be sorted */
555567
@Test
568+
@ConditionalIgnoreRule.ConditionalIgnore(condition = SkipOnThinJar.class)
556569
public void testSortedResultChunkWithStructVectors() throws Throwable {
557570
Connection con = getConnection();
558571
Statement statement = con.createStatement();
@@ -622,6 +635,7 @@ public void testSortedResultChunkWithStructVectors() throws Throwable {
622635

623636
/** Test that the first chunk can be sorted */
624637
@Test
638+
@ConditionalIgnoreRule.ConditionalIgnore(condition = SkipOnThinJar.class)
625639
public void testSortedResultChunk() throws Throwable {
626640
Connection con = getConnection();
627641
Statement statement = con.createStatement();

‎thin_public_pom.xml

+267
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,267 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
6+
<groupId>net.snowflake</groupId>
7+
<artifactId>snowflake-jdbc-thin</artifactId>
8+
<version>1.0-SNAPSHOT</version>
9+
<packaging>jar</packaging>
10+
<name>Snowflake JDBC Driver Thin</name>
11+
<description>Snowflake JDBC Driver Thin</description>
12+
<url>https://www.snowflake.net/</url>
13+
14+
<licenses>
15+
<license>
16+
<name>The Apache Software License, Version 2.0</name>
17+
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
18+
</license>
19+
</licenses>
20+
21+
<developers>
22+
<developer>
23+
<name>Snowflake Support Team</name>
24+
<email>snowflake-java@snowflake.net</email>
25+
<organization>Snowflake Computing</organization>
26+
<organizationUrl>https://www.snowflake.net</organizationUrl>
27+
</developer>
28+
</developers>
29+
30+
<scm>
31+
<connection>scm:git:git://github.com/snowflakedb/snowflake-jdbc</connection>
32+
<url>http://github.com/snowflakedb/snowflake-jdbc/tree/master</url>
33+
</scm>
34+
35+
<properties>
36+
<apache.httpclient.version>4.5.14</apache.httpclient.version>
37+
<apache.httpcore.version>4.4.16</apache.httpcore.version>
38+
<awssdk.version>1.12.501</awssdk.version>
39+
<azure.storage.version>5.0.0</azure.storage.version>
40+
<bouncycastle.version>1.74</bouncycastle.version>
41+
<commons.codec.version>1.15</commons.codec.version>
42+
<commons.io.version>2.11.0</commons.io.version>
43+
<commons.logging.version>1.2</commons.logging.version>
44+
<google.cloud.core.version>2.21.0</google.cloud.core.version>
45+
<google.cloud.storage.version>2.22.6</google.cloud.storage.version>
46+
<google.flatbuffers.version>1.12.0</google.flatbuffers.version>
47+
<google.gax.version>2.31.0</google.gax.version>
48+
<google.guava.version>32.1.1-jre</google.guava.version>
49+
<google.http.client.version>1.43.3</google.http.client.version>
50+
<google.jsr305.version>3.0.2</google.jsr305.version>
51+
<google.protobuf.java.version>3.23.3</google.protobuf.java.version>
52+
<grpc.version>1.60.0</grpc.version>
53+
<jackson.version>2.15.3</jackson.version>
54+
<javax.servlet.version>3.1.0</javax.servlet.version>
55+
<jna.version>5.13.0</jna.version>
56+
<joda.time.version>2.8.1</joda.time.version>
57+
<json.smart.version>2.4.9</json.smart.version>
58+
<jsoup.version>1.15.3</jsoup.version>
59+
<metrics.version>2.2.0</metrics.version>
60+
<netty.version>4.1.100.Final</netty.version>
61+
<nimbusds.version>9.21</nimbusds.version>
62+
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
63+
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
64+
<slf4j.version>2.0.6</slf4j.version>
65+
</properties>
66+
67+
<dependencyManagement>
68+
<dependencies>
69+
<dependency>
70+
<groupId>com.amazonaws</groupId>
71+
<artifactId>aws-java-sdk-bom</artifactId>
72+
<version>${awssdk.version}</version>
73+
<type>pom</type>
74+
<scope>import</scope>
75+
</dependency>
76+
<dependency>
77+
<groupId>com.fasterxml.jackson</groupId>
78+
<artifactId>jackson-bom</artifactId>
79+
<version>${jackson.version}</version>
80+
<type>pom</type>
81+
<scope>import</scope>
82+
</dependency>
83+
<dependency>
84+
<groupId>com.google.http-client</groupId>
85+
<artifactId>google-http-client-bom</artifactId>
86+
<version>${google.http.client.version}</version>
87+
<type>pom</type>
88+
<scope>import</scope>
89+
</dependency>
90+
<dependency>
91+
<groupId>com.google.protobuf</groupId>
92+
<artifactId>protobuf-bom</artifactId>
93+
<version>${google.protobuf.java.version}</version>
94+
<type>pom</type>
95+
<scope>import</scope>
96+
</dependency>
97+
<dependency>
98+
<groupId>io.grpc</groupId>
99+
<artifactId>grpc-bom</artifactId>
100+
<version>${grpc.version}</version>
101+
<type>pom</type>
102+
<scope>import</scope>
103+
</dependency>
104+
</dependencies>
105+
</dependencyManagement>
106+
107+
<dependencies>
108+
<dependency>
109+
<groupId>org.bouncycastle</groupId>
110+
<artifactId>bcpkix-jdk18on</artifactId>
111+
<version>${bouncycastle.version}</version>
112+
</dependency>
113+
<dependency>
114+
<groupId>org.bouncycastle</groupId>
115+
<artifactId>bcprov-jdk18on</artifactId>
116+
<version>${bouncycastle.version}</version>
117+
</dependency>
118+
<dependency>
119+
<groupId>com.amazonaws</groupId>
120+
<artifactId>aws-java-sdk-core</artifactId>
121+
</dependency>
122+
<dependency>
123+
<groupId>com.amazonaws</groupId>
124+
<artifactId>aws-java-sdk-kms</artifactId>
125+
</dependency>
126+
<dependency>
127+
<groupId>com.amazonaws</groupId>
128+
<artifactId>aws-java-sdk-s3</artifactId>
129+
</dependency>
130+
<dependency>
131+
<groupId>com.fasterxml.jackson.core</groupId>
132+
<artifactId>jackson-annotations</artifactId>
133+
</dependency>
134+
<dependency>
135+
<groupId>com.fasterxml.jackson.core</groupId>
136+
<artifactId>jackson-core</artifactId>
137+
</dependency>
138+
<dependency>
139+
<groupId>com.fasterxml.jackson.core</groupId>
140+
<artifactId>jackson-databind</artifactId>
141+
</dependency>
142+
<dependency>
143+
<groupId>com.google.api</groupId>
144+
<artifactId>gax</artifactId>
145+
<version>${google.gax.version}</version>
146+
</dependency>
147+
<dependency>
148+
<groupId>com.google.cloud</groupId>
149+
<artifactId>google-cloud-core</artifactId>
150+
<version>${google.cloud.core.version}</version>
151+
</dependency>
152+
<dependency>
153+
<groupId>com.google.cloud</groupId>
154+
<artifactId>google-cloud-storage</artifactId>
155+
<version>${google.cloud.storage.version}</version>
156+
</dependency>
157+
<dependency>
158+
<groupId>com.google.code.findbugs</groupId>
159+
<artifactId>jsr305</artifactId>
160+
<version>${google.jsr305.version}</version>
161+
</dependency>
162+
<dependency>
163+
<groupId>com.google.guava</groupId>
164+
<artifactId>guava</artifactId>
165+
<version>${google.guava.version}</version>
166+
</dependency>
167+
<dependency>
168+
<groupId>com.google.http-client</groupId>
169+
<artifactId>google-http-client</artifactId>
170+
</dependency>
171+
<dependency>
172+
<groupId>com.microsoft.azure</groupId>
173+
<artifactId>azure-storage</artifactId>
174+
<version>${azure.storage.version}</version>
175+
</dependency>
176+
<dependency>
177+
<groupId>com.nimbusds</groupId>
178+
<artifactId>nimbus-jose-jwt</artifactId>
179+
<version>${nimbusds.version}</version>
180+
</dependency>
181+
<dependency>
182+
<groupId>com.yammer.metrics</groupId>
183+
<artifactId>metrics-core</artifactId>
184+
<version>${metrics.version}</version>
185+
</dependency>
186+
<dependency>
187+
<groupId>com.yammer.metrics</groupId>
188+
<artifactId>metrics-servlet</artifactId>
189+
<version>${metrics.version}</version>
190+
</dependency>
191+
<dependency>
192+
<groupId>commons-codec</groupId>
193+
<artifactId>commons-codec</artifactId>
194+
<version>${commons.codec.version}</version>
195+
</dependency>
196+
<dependency>
197+
<groupId>commons-io</groupId>
198+
<artifactId>commons-io</artifactId>
199+
<version>${commons.io.version}</version>
200+
</dependency>
201+
<dependency>
202+
<groupId>commons-logging</groupId>
203+
<artifactId>commons-logging</artifactId>
204+
<version>${commons.logging.version}</version>
205+
</dependency>
206+
<dependency>
207+
<groupId>javax.servlet</groupId>
208+
<artifactId>javax.servlet-api</artifactId>
209+
<version>${javax.servlet.version}</version>
210+
</dependency>
211+
<dependency>
212+
<groupId>joda-time</groupId>
213+
<artifactId>joda-time</artifactId>
214+
<version>${joda.time.version}</version>
215+
</dependency>
216+
<dependency>
217+
<groupId>net.java.dev.jna</groupId>
218+
<artifactId>jna</artifactId>
219+
<version>${jna.version}</version>
220+
<optional>true</optional>
221+
</dependency>
222+
<dependency>
223+
<groupId>net.java.dev.jna</groupId>
224+
<artifactId>jna-platform</artifactId>
225+
<version>${jna.version}</version>
226+
<optional>true</optional>
227+
</dependency>
228+
<dependency>
229+
<groupId>net.minidev</groupId>
230+
<artifactId>json-smart</artifactId>
231+
<version>${json.smart.version}</version>
232+
</dependency>
233+
<dependency>
234+
<groupId>org.apache.httpcomponents</groupId>
235+
<artifactId>httpclient</artifactId>
236+
<version>${apache.httpclient.version}</version>
237+
</dependency>
238+
<dependency>
239+
<groupId>org.apache.httpcomponents</groupId>
240+
<artifactId>httpcore</artifactId>
241+
<version>${apache.httpcore.version}</version>
242+
</dependency>
243+
<dependency>
244+
<groupId>org.jsoup</groupId>
245+
<artifactId>jsoup</artifactId>
246+
<version>${jsoup.version}</version>
247+
</dependency>
248+
<dependency>
249+
<groupId>org.slf4j</groupId>
250+
<artifactId>slf4j-api</artifactId>
251+
<version>${slf4j.version}</version>
252+
<scope>provided</scope>
253+
</dependency>
254+
<dependency>
255+
<groupId>com.fasterxml.jackson.datatype</groupId>
256+
<artifactId>jackson-datatype-jsr310</artifactId>
257+
<scope>runtime</scope>
258+
</dependency>
259+
<dependency>
260+
<!-- used by apache arrow -->
261+
<groupId>com.google.flatbuffers</groupId>
262+
<artifactId>flatbuffers-java</artifactId>
263+
<version>${google.flatbuffers.version}</version>
264+
</dependency>
265+
</dependencies>
266+
267+
</project>

0 commit comments

Comments
 (0)
Please sign in to comment.