我可以降低AWS依赖关系的大小,因为我没有使用所有服务吗?

时间:2017-01-19 20:46:01

标签: java amazon-web-services gradle amazon-s3

我们最近开始使用适用于S3和SES的AWS API,因此我们根据文档的要求在依赖项中添加了此项:

compile group: 'com.amazonaws', name: 'aws-java-sdk', version: '1.11.48'

但我们的WAR文件从仅仅66Mb增长到接近150Mb。有没有办法减少亚马逊代码的开销,因为它淹没了我们的Perm Gen并获得了OOM。我暂时增加了我们的Perm Gen,但是如果我能删除不必要的代码,我可能会再次降低我们的Perm Gen。

任何削减依赖关系的官方方式?

3 个答案:

答案 0 :(得分:1)

拉入整个AWS SDK。如果您只想使用特定服务,则可以包含这些特定的SDK组件。

例如,要仅包含SDK的S3和DynamoDB组件:

compile group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.11.48'
compile group: 'com.amazonaws', name: 'aws-java-sdk-dynamodb', version: '1.11.48'

您可以通过查看project on GitHub

来查看不同的组件

答案 1 :(得分:1)

AWS SDK for Java根据各自的服务分为包。

SDK文档建议使用Maven导入单个包。

使用Maven,将SDK for Java的BOM添加到您的pom.xml文件中作为依赖项:

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

然后,您可以指定要导入的各个包:

<dependencies>
  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-s3</artifactId>
  </dependency>
  <dependency>
    <groupId>com.amazonaws</groupId>
    <artifactId>aws-java-sdk-ses</artifactId>
  </dependency>
</dependencies>

来源:http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/setup-project-maven.html

答案 2 :(得分:1)

如果您在项目中仅使用 S3,我建议您查看此内容。

https://www.baeldung.com/java-aws-s3-reactive

通过这种方式,JAR 文件的大小大大减少了

就我而言,当我使用整个 AWS-SDK 时,它大约为 250 MB - 在遵循上述方法后,它已减少到 120 MB