aws / aws/aws-lambda-builders

JavaMavenWorkflow sam build fails with `[Errno 20] Not a directory`

Open
#113 8 comments 5 reactions 0 assignees View on GitHub
area/workflow/java_maven maintainer/need-response
Dominant language
Python
Stars
380
Forks
161
Avg merge
1d 1h
Merged PRs (30d)
2

Description

Getting an error when running `sam build` in an existing project of mine,
where the sam template has a CodeUri that points to a JAR file in a reactor build submodule.

**Steps to reproduce the issue:**

1. existing java maven project using reactor builds with
1.1 a shaded jar generated in a maven submodule's target directory
(`/lambdas/mainlambda/target/lambda.jar` in my case)
1.2 a template.yaml in the `` directory using
`CodeUri: lambdas/mainlambda/target/lambda.jar`
2. cd ``
3. `sam build --debug`

**Observed result:**
```text
2019-04-28 19:31:55 Collected default values for parameters: {}
2019-04-28 19:31:55 12 resources found in the template
2019-04-28 19:31:55 Found Serverless function with name='LatestFunction' and CodeUri='lambdas/mainlambda/target/lambda.jar'
2019-04-28 19:31:55 Found Serverless function with name='LiveFunction' and CodeUri='lambdas/mainlambda/target/lambda.jar'
2019-04-28 19:31:55 Found Serverless function with name='TestRunnerFunction' and CodeUri='lambdas/testlambda/target/lambda.jar'
2019-04-28 19:31:55 Building resource 'LatestFunction'
2019-04-28 19:31:55 Looking for a supported build workflow in following directories: ['/GitRepos/someproject/lambdas/mainlambda/target/lambda.jar', '/GitRepos/someproject']
2019-04-28 19:31:55 Loading workflow module 'aws_lambda_builders.workflows'
2019-04-28 19:31:55 Registering workflow 'PythonPipBuilder' with capability 'Capability(language='python', dependency_manager='pip', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'NodejsNpmBuilder' with capability 'Capability(language='nodejs', dependency_manager='npm', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'RubyBundlerBuilder' with capability 'Capability(language='ruby', dependency_manager='bundler', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'GoDepBuilder' with capability 'Capability(language='go', dependency_manager='dep', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'GoModulesBuilder' with capability 'Capability(language='go', dependency_manager='modules', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'JavaGradleWorkflow' with capability 'Capability(language='java', dependency_manager='gradle', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'JavaMavenWorkflow' with capability 'Capability(language='java', dependency_manager='maven', application_framework=None)'
2019-04-28 19:31:55 Registering workflow 'DotnetCliPackageBuilder' with capability 'Capability(language='dotnet', dependency_manager='cli-package', application_framework=None)'
2019-04-28 19:31:55 Found workflow 'JavaMavenWorkflow' to support capabilities 'Capability(language='java', dependency_manager='maven', application_framework=None)'
2019-04-28 19:31:55 Running workflow 'JavaMavenWorkflow'
2019-04-28 19:31:55 Running JavaMavenWorkflow:CopySource
2019-04-28 19:31:55 JavaMavenWorkflow:CopySource raised unhandled exception
Traceback (most recent call last):
File "/.virtualenvs/aws/lib/python3.6/site-packages/aws_lambda_builders/workflow.py", line 248, in run
action.execute()
File "/.virtualenvs/aws/lib/python3.6/site-packages/aws_lambda_builders/actions.py", line 101, in execute
copytree(self.source_dir, self.dest_dir, ignore=shutil.ignore_patterns(*self.excludes))
File "/.virtualenvs/aws/lib/python3.6/site-packages/aws_lambda_builders/utils.py", line 43, in copytree
names = os.listdir(source)
NotADirectoryError: [Errno 20] Not a directory: '/GitRepos/someproject/lambdas/mainlambda/target/lambda.jar'
```

**Expected result:**

I would expect it to run the equivalent of

```bash
(in folder)
mvn package -Dmaven.test.skip=true -pl lambdas/mainlambda -am
```
Which is what i run when I want to just build lambda.jar

- `-pl lambdas/mainlambda` because that is the module folder of the `target` folder where `lambda.jar` is located.
- `-am` because otherwise reactor builds will fail
- `-Dmaven.test.skip=true` because when run from the aws-toolkit, you don't want to rerun the whole test suite (?)

This `sam build` failure is preventing me from creating launch configurations using aws-toolkit for Intellij.

**Additional environment details (Ex: Windows, Mac, Amazon Linux etc)**

I don't believe my environment makes any difference in this issue, but I'll answer any request for more information if that is deemed necessary

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.