【问题标题】:Build AWS SDK Jar to Import for a Single Package构建 AWS 开发工具包 Jar 以导入单个包
【发布时间】:2016-07-26 13:51:34
【问题描述】:

目前我只想将 Java AWS 开发工具包用于 S3。 因此,我不想导入整个 AWS SDK jar 文件,而只想将用于访问我的 S3 存储桶的必要包导入我的 Web 应用程序(IDE:Netbeans)。

为此,我读到我应该使用 Maven 来构建我需要的 jar。

我尝试了两种方法,但似乎无法在我正在构建的 jar 中包含所有 aws-java-sdk-s3 依赖项。

第一种方法

1) 我从 https://github.com/aws/aws-sdk-java 下载压缩后的 aws-sdk-java 文件夹

2) 我解压到本地文件夹。

3) 我导航到控制台中的 aws-java-sdk-s3(即:pom 所在的位置)文件夹,然后键入“mvn clean install”。

虽然这会构建一个 jar 文件(位于 aws-java-sdk-s3/target),但该 jar 不包含 POM 文件中指定的依赖项(例如:它不包含我需要的核心包中的 BasicAWSCredentials 类)。

第二种方法 更改位于 aws-java-sdk-master 文件夹中的 POM 文件,使其导入 BOM 并通过添加以下内容指定我的要求 (S3):

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.amazonaws</groupId>
      <artifactId>aws-java-sdk-bom</artifactId>
      <version>1.10.67</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>
<dependencies>
  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
  </dependency>
</dependencies>

并删除 POM 中列出的所有其他依赖项(例如:junit)。

这种方法在构建 DynamoDB 包时失败,我什至不需要它来构建它(我想指定它只需要 S3)。

关于我做错了什么有什么建议吗? 也许这里的主要问题是我是 Maven 新手。

谢谢

【问题讨论】:

标签: java maven amazon-web-services amazon-s3 jar


【解决方案1】:

您可以直接从 maven 下载您感兴趣的 Jar: http://central.maven.org/maven2/com/amazonaws/aws-java-sdk-s3/1.10.66/aws-java-sdk-s3-1.10.66.jar

使用您要使用的 sdk 版本更新 URL,您可以将 jar 导入您的项目中,无需重新构建它

【讨论】:

  • 感谢您的回答。我还使用了 BasicAWSCredentials 类,它是aws-java-sdk-core 包的一部分。此包被列为依赖项,但由于某种原因 BasicAWSCredentials 类未包含在您链接到的 jar 中。我也可以随时下载core jar...我只是想知道它是否不应该全部打包在一个 jar 中?
  • 从链接中你只会得到 s3 类,它不会包含依赖项;如果您正在使用它们,则需要单独下载并上传到您的项目中
  • 好吧,我想我误解了什么是依赖。我认为由于 AmazonS3Client 可以接受 BasicAWSCredential 对象作为参数,因此这意味着 BasicAWSCredential 被视为依赖项,并将包含在 jar 中。我猜只有构建包所需的类才是被认为是依赖项的类?这是正确的吗?
  • 即依赖管理 - 当您使用第三方库时,您不会将其与您的 jar 文件打包,您将定义一个依赖,以便用于解决依赖的工具(maven、gradle)它们将下载您的工具 + 正确的库
【解决方案2】:

同样正确更新您的 pom.xml,

<dependencies>

....


<!-- AWS dependencies -->

<dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk</artifactId>
    <version>1.10.43</version>
</dependency>

....

</dependencies>

【讨论】:

    【解决方案3】:

    使用 Gradle 对我来说效果很好。这是我按照API doc 的建议使用的 Gradle 构建文件。

    group 'aws.test'
    version '1.0'
    
    apply plugin: 'java'
    
    sourceCompatibility = 1.8
    
    repositories {
      mavenCentral()
    }
    
    buildscript {
      repositories {
          mavenCentral()
      }
      dependencies {
          classpath "io.spring.gradle:dependency-management-plugin:1.0.3.RELEASE"
      }
    }
    
    apply plugin: "io.spring.dependency-management"
    
    dependencyManagement {
      imports {
          mavenBom 'software.amazon.awssdk:bom:2.0.0-preview-12'
      }
    }
    
    dependencies {
      compile 'software.amazon.awssdk:s3'
      testCompile group: 'junit', name: 'junit', version: '4.11'
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-17
      • 2021-10-29
      • 2020-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-11-10
      • 2012-05-24
      • 2015-04-07
      • 2013-07-19
      相关资源
      最近更新 更多