Unable to resolve jar dependency in Java project for

785 views Asked by At

I have 2 java projects on GitHub, the first project produces a java library and the second project uses it.

The first project is build via first job in yaml file and it installs the library in /home/runner/.m2/repository/ successfully

Then when the second project is build via the second job in the same yaml file , it fails with error

Failed to execute goal on project <>: Could not resolve dependencies 
for project Could not find artifact <>:jar:1.0-
SNAPSHOT -> [Help 1]

In my second project, I have included the dependency to load this library jar(produced by first project) from the repository.

MY understanding is that my second project should load the jar library from the /home/runner/.m2/repository/ but its not loading it.

Any help is appreciated.

Also can we access /home/runner/.m2/repository/ to check if it contains the library jar.

./project_account_library/account_library => Contains maven project 
./project_account_service/account_service => Contains maven project 
./.github/workflows/build.yml

Here is the yml file

name: Build account service
on:
push:
branches: [main]

env:
IMAGE_NAME: accountservice

jobs:


build_dependency: 
runs-on: ubuntu-latest
permissions:
  packages: write
  contents: read

steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
  with:
    distribution: 'temurin' # See 'Supported distributions' for available options
    java-version: '17'
  

- name: Build Dependency
  run: |
      cd ./project_account_library/account_library
      mvn clean install
      

build_accountservice: 
runs-on: ubuntu-latest
permissions:
  packages: write
  contents: read


steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
  with:
    distribution: 'temurin' # See 'Supported distributions' for available options
    java-version: '17'

- name: Build Account Service
  run: |
      cd ./project_account_service/account_service
      mvn clean install

First Step

[INFO] Installing /home/runner/work/<>/<>/target/account_
library_1.0-SNAPSHOT.jar to 
/home/runner/.m2/repository/com/<>/<>/account_library/1.0-
SNAPSHOT/account_library-1.0-SNAPSHOT.jar

Second Step

Error:  Failed to execute goal on project <>: Could not resolve 
dependencies for project <>: Could not find artifact com.<>. 
<>:account_library:jar:1.0-SNAPSHOT -> [Help 1]

Thanks Frennky

I now used only 1 job and below is my new .yml file
- name: Build Account Service run: | cd ./project_account_library/account_library mvn clean install cd ../../project_account_service/account_service mvn clean install

First directory is successfully built but it fails to cd to ../../project_account_service/account_service and fails to build with below error

/home/runner/work/_temp/ea229141-b0c3-455d-82f0-12ff588d420a.sh: line 12: cd ../../project_account_service/account_service: No such file or directory

1

There are 1 answers

4
frennky On

The reason you're missing dependencies on your second job is because those 2 jobs, by default, run in parallel and they do so on 2 different runners. From docs:

Each job will run inside its own virtual machine runner, or inside a container...

There's few ways you can go around this. I can suggest one quick and easy, and another that would probably be a way to go, but require slightly more effort.

  • Easy way out of this is to put all steps in a single job.

  • Better way would be to make use of Github Package repository, where you could push your lib/dependencies and then resolve them for your service.

For more details on Github Package repository you can check docs.

Update:

Ok, I've reread your new error and I think I understand the issue.

If I got it right your dir structure is as follows:

  • repo
    • project_account_library
      • account_library
    • project_account_service
      • account_service

Each run step actually starts at root of you repo. You can use working-directory like so:

# ...
- name: Build Dependency
  run: mvn clean install
  working-directory: ./project_account_library/account_library
# ...
- name: Build Account Service
  run: mvn clean install
  working-directory: ./project_account_service/account_service