Some users may need to work across Bazel and Maven projects. Particularly there are two common use cases.
To use SNAPSHOT jars in a Bazel project just like one would in Maven, the following steps need to be taken.
- Copy or link SNAPSHOT jar to same directory as or relative to Bazel BUILD file.
- Create a java_import rule that points to the SNAPSHOT jar.
- Replace maven_install rule in dependency list with java_import.
- Build and profit.
Copy the SNAPSHOT jar.
cd $BUILD_DIR
cp ~/.m2/repository/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.30-SNAPSHOT.jar .
Or symlink to it. The advantage of using a link is that the jar can be updated by Maven and re-run build in Bazel.
cd $BUILD_DIR
ln -s ~/.m2/repository/org/slf4j/slf4j-api/1.7.29/slf4j-api-1.7.30-SNAPSHOT.jar .
Create java_import rule in BUILD file. In this example, we'll use slf4j-api. This assumes that the location of the SNAPSHOT has been copied or symlinked to the same directory as the BUILD file.
java_import(
name = "org_slf4j_slf4j_api",
jars = [":slf4j-api-1.7.30-SNAPSHOT.jar"],
)
Then, in the deps attribute replace maven_install rule for slf4j-api with the java_import that was just created.
java_library(
name = "fruit-api",
srcs = glob(["src/main/java/**/*.java"]),
visibility = ["//visibility:public"],
deps = [
...
":org_slf4j_slf4j_api", # instead of "@maven//:org_slf4j_slf4j_api"
...
],
)
Similar to above, we can generate SNAPSHOT jars using Bazel, so that they can be used in Maven projects. See below for detailed steps.
- Make code changes to the library which you want to release SNAPSHOT jar for.
- Build your library by running
bazel build <path to the library>
. - Run
bazel run @pomgen//:update -- --package <path to the library>
to update version of your library artifact. - Run
bazel run @pomgen//maven -- -a pomgen
to generate poms - Run
bazel run @pomgen//maven -- -a install
to install the libraries into~/.m2/repository
. - Update the pom.xml in the consuming Maven project to use -SNAPSHOT of your library.
Make some code changes in examples/hello-world/healthyfoods/fruit-api
.
Run bazel build.
bazel build //examples/hello-world/healthyfoods/fruit-api
Update artifact version.
bazel run @pomgen//:update -- --package examples/hello-world/healthyfoods/fruit-api
Generate pom(s).
bazel run @pomgen//maven -- -a pomgen
Install the built library into ~/.m2/repository
.
bazel run @pomgen//maven -- -a install
Then, update the pom.xml of the consuming Maven project.
<dependency>
<groupId>com.pomgen.example</groupId>
<artifactId>fruit-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
Now you can compile your Maven project, it should be using the latest SNAPSHOT jars produced by Bazel.