почтовый файл слишком большой aws лямбда java gradle - PullRequest
0 голосов
/ 03 мая 2020

Я хотел бы развернуть свою java функцию на aws лямбда

Я взял эту документацию https://docs.aws.amazon.com/lambda/latest/dg/java-package.html

Это мой build.gradle файл

plugins {
    id 'java'
    id 'org.jetbrains.kotlin.jvm' version '1.3.61'
}

group 'com.xxx'
version '1.0'

sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
    implementation "org.jetbrains:annotations:16.0.2"
    implementation 'com.amazonaws:aws-lambda-java-core:1.2.0'
    implementation 'com.amazonaws:aws-lambda-java-events:2.2.7'
    implementation 'com.google.code.gson:gson:2.8.6'

    compile group: 'org.bytedeco', name: 'javacv-platform', version: '1.5.2'

    runtimeOnly 'com.amazonaws:aws-lambda-java-log4j2:1.1.0'

    testCompile group: 'junit', name: 'junit', version: '4.12'
}

jar {
    manifest {
        attributes 'Main-Class': 'Main'
    }
}

task fatJar(type: Jar) {
    manifest {
        attributes 'Implementation-Title': 'Gradle Jar File Example',
                'Implementation-Version': archiveVersion,
                'Main-Class': 'Main'
    }
    baseName = project.name + '-all'
    from sourceSets.main.output

    dependsOn configurations.runtimeClasspath
    from {
        configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
    }
    with jar
}

task buildZip(type: Zip) {
    manifest {
        attributes (
                'Implementation-Title': 'AWS Handler',
                'Implementation-Version': archiveVersion,
                'Main-Class': 'AWSHandler'
        )
    }

    from compileJava
    from processResources
    into('lib') {
        from configurations.runtimeClasspath
    }
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}

Итак, я запускаю gradle buildZip, чтобы построить свой zip, мой класс aws, реализующий RequestHandler, находится в src/main/java/AWSHandler.java

Как только команда завершилась успешно, у меня есть 710MB почтовый файл, это огромный !!! Когда я распаковываю файл, я вижу, что есть много библиотек, которые поддерживают множество ОС

enter image description here

В процессе выполнения это делает c https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html кажется, что функции java8 работают на Amazon Linux

Так что я могу почистить свой zip, чтобы получить только эту ОС

Могу ли я сделать это с помощью gradle или мне нужно создать дополнительный скрипт очистить мой файл?

1 Ответ

1 голос
/ 04 мая 2020

Метод into типа задачи Zip может принимать CopySpec, который можно использовать для добавления исключений:

https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Zip.html#org .gradle.api.tasks.bundling. Zip: into (java .lang.Object,% 20org.gradle.api.Action)

into('lib') {
    from configurations.runtimeClasspath
    exclude("**windows**") // example, untested.
}

См. Javado c для получения более подробной информации: https://docs.gradle.org/current/javadoc/org/gradle/api/file/CopySpec.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...