1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
---
layout: documentation
title: Generate external dependencies for a Java project
---
# Generate external dependencies from Maven projects
The tool `generate_workspace` helps automate the process of writing
the `WORKSPACE` file for a Java project. This tool is
helpful when the list of external dependencies is long, such as when working
with [external transitive dependnecies](/docs/external.html#external-packages).
The `generate_workspace` tool will generate:
* a `generate_workspace.bzl` file which includes:
* the `generated_maven_jars` macro that will contain the transitive
dependencies, and
* the `generated_java_libraries` macro that will contain a library
for each maven_jar.
## Install `generate_workspace`
Bazel's binary installer does not include `generate_workspace`. To be able to
use this tool:
1. Clone Bazel's migration tooling repo:
```
git clone https://github.com/bazelbuild/migration-tooling.git
```
2. Run the following to build the `generate_workspace` tool and see usage:
```
bazel run //generate_workspace
```
## Generate a list of external dependencies
1. Run the `generate_workspace` tool.
When you run the tool, you can specify Maven projects (that is,
directories containing a `pom.xml` file), or Maven artifact coordinates
directly. For example:
```bash
$ bazel run //generate_workspace -- \
> --maven_project=/path/to/my/project \
> --artifact=groupId:artifactId:version \
> --artifact=groupId:artifactId:version
Wrote:
/tmp/1437415510621-0/2015-07-20-14-05-10.WORKSPACE
/tmp/1437415510621-0/2015-07-20-14-05-10.BUILD
```
2. The tool creates one outputs, a `generate_workspace.bzl` file that contains
two macros:
1. The `generated_maven_jars` macro that will contain the transitive
dependencies of the given projects and artifacts.
If you specify multiple Maven projects or artifacts,
they will all be combined into one `WORKSPACE` file. For example, if
an artifact depends on junit and the Maven project also depends
on junit, then junit will only appear once as a dependency in the
output.
2. The `generated_java_libraries` macro will contain a library
for each maven_jar.
3. Copy the `generate_workspace.bzl` file to your workspace, and add the
following to your WORKSPACE file:
```
load("//:generate_workspace.bzl", "generated_maven_jars")
generated_maven_jars()
```
You can now access any of the jars in `generate_workspace.bzl`.
4. Ensure `generate_workspace.bzl` lists the correct version of each
dependency.
If several different versions of an artifact are requested (by
different libraries that depend on it), then `generate_workspace` chooses
a version and annotates the `maven_jar` with the other versions requested.
Here's an example of the contents of `generate_workspace.bzl`:
```python
# org.springframework:spring:2.5.6
# javax.mail:mail:1.4
# httpunit:httpunit:1.6 wanted version 1.0.2
# org.springframework:spring-support:2.0.2 wanted version 1.0.2
# org.slf4j:nlog4j:1.2.24 wanted version 1.0.2
native.maven_jar(
name = "javax_activation_activation",
artifact = "javax.activation:activation:1.1",
)
```
The example above indicates that `org.springframework:spring:2.5.6`,
`javax.mail:mail:1.4`, `httpunit:httpunit:1.6`,
`org.springframework:spring-support:2.0.2`, and `org.slf4j:nlog4j:1.2.24`
all depend on javax.activation. However, two of these libraries wanted
version 1.1 and three of them wanted 1.0.2. The `WORKSPACE` file is using
version 1.1, but that might not be the right version to use.
|