Reduzir arquivos jar número no pacote de implementação para a função Java Lambda

AHL:

Estou desenvolvendo uma função Lambda com dois manipuladores: um para sites de raspagem, e um para a construção de um site estático com base no conteúdo raspados e combinado.

Eu criei duas classes separadas com os métodos de dois lidar com ambos a raspagem ea construção de website. Ambas as classes usar o AWS Java SDK para acessar serviços como o S3 e DynamoDB. Também estou usando outras bibliotecas como Apache gratuito Marker, Gson, etc.

Eu ter garantido que no meu código, apenas a classes específicas são importados e evitadas quaisquer import .*expressões do tipo.

Depois que eu construir e implantar o meu Lambda, e inspecionar o pacote de implantação, noto o enorme tamanho: 123 megabyte! Razão para o grande tamanho do pacote é que um colossal arquivos 211 (!) Jar estão incluídos na pasta lib.

Quando eu analisar ainda mais os arquivos JAR incluídos, notei que 90% + do frasco do são do AWS SDK.

A minha pergunta : este é um arquivo de tamanho normal para um pacote de implantação Lambda ao construir aplicativos com integrações para diferentes serviços da AWS, ou estou fazendo algo errado aqui? Na minha opinião, este não é um aplicativo complexo em tudo e a quantidade de do frasco que foi importado parece excessiva e explodir o pacote de implantação.

Edit 1: meu pom.xml está incluído abaixo:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>helloworld</groupId>
    <artifactId>HelloWorld</artifactId>
    <version>1.0</version>
    <packaging>jar</packaging>
    <name>A sample Hello World created for SAM CLI.</name>
    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencyManagement>
        <dependencies>
            <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-bom -->
            <dependency>
                <groupId>com.amazonaws</groupId>
                <artifactId>aws-java-sdk-bom</artifactId>
                <version>1.11.651</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-core</artifactId>
            <version>1.2.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.12.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-lambda-java-events -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-lambda-java-events</artifactId>
            <version>2.2.7</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk</artifactId>
            <version>1.11.659</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/software.amazon.awssdk/sdk-core -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-core</artifactId>
            <!--<version>1.11.651</version>-->
        </dependency>
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-dynamodb</artifactId>
            <!--<version>1.11.651</version>-->
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.6</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.amazonaws/aws-java-sdk-s3 -->
        <dependency>
            <groupId>com.amazonaws</groupId>
            <artifactId>aws-java-sdk-s3</artifactId>
            <!--<version>1.11.651</version>-->
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.29</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>


    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>3.1.1</version>
                <configuration>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Edit 2: depois de excluir a dependência 'aws-java-sdk' e re-construção do projeto, eu era capaz de executar o comando 'Deploy sem servidor de aplicativos' novamente, e funcionou. O tamanho do pacote de implantação é até 9,3 megabytes e 21 frasco de - eu verifiquei do jar incluído e eles são de fato aqueles que eu realmente necessidade.

Jacob G.:

O problema aqui é que você tem o seguinte como uma das suas dependências:

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

Isso resulta em seu projeto, dependendo toda a AWS Java SDK, em vez de módulos de serviços individuais.

A solução é remover essa dependência, e depende apenas os módulos que são necessários para o seu projeto para funcionar corretamente.

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=330824&siteId=1
Recomendado
Clasificación