aboutsummaryrefslogtreecommitdiffstats
path: root/p2gen/README.txt
blob: 3443b03f2db0f0c7a82fd9de8708a09fb75b1a02 (plain)
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
Summary:

To generate p2 artifacts from jars, run:
$ mvn --no-snapshot-updates --offline p2:site \
    -Dmaven.repo.local=../../out/host/maven/localrepo
The folder ${build.directory}/repository contains the resultant
p2 repository. ${build.directory} is defined inside pom.xml

Details:

The Eclipse plugins in $root/sdk/eclipse/plugins depend on a number
of jar files from:
    $root/tools/base
    $root/tools/swt
    $root/prebuilts/tools/common/m2/repository

In earlier versions, a script (create_all_symlinks.sh) knew about
which plugins depended on which jars, and when executed, it would
copy over those jars into the plugin's libs folder. Each plugin
included the jars from its libs folder as part of its classpath,
and the entire libs folder was bundled inside the plugin.

Such a scheme has a number of issues:
 - bundling jars inside libs/ folder inside each plugin is not
   recommended by Eclipse. This causes performance degradation
   at runtime.
 - at build time, the script modifies the source folders to add
   the contents inside libs folder. Ideally, the source folders
   shouldn't be modified during build.
 - the script has to maintain state about which plugin depends
   on which jars.

The approach suggested by Eclipse is to replace the regular jars
with OSGI bundles, and for each plugin to explicitly add a dependency
to the required OSGI bundles. In essence, this makes each of the
jars to be similar to a plugin.

This folder contains scripts that can be used to convert a set
of jars into OSGI bundles using the p2-maven-plugin
(https://github.com/reficio/p2-maven-plugin).

$ mvn --no-snapshot-updates \
      --offline \
      -Dmaven.repo.local=../../out/host/maven/localRepo \
      p2:site

The pom.xml file lists the set of jars to be processed. The
runtime options to Maven include:
 --offline: We don't want Maven to fetch anything from the internet.
   All required dependencies must be checked into git.
 --no-snapshot-updates: If the tools artifacts have a -SNAPSHOT
   in them, Maven will attempt to re-download those artifacts,
   which would fail since we are running in offline mode. This
   option instructs Maven to not attempt to download these
   snapshots and use whatever is available in the local repositories.
 -Dmaven.repo.local=path to the local repository that should be
   used by maven. Without this, it'll use $HOME/.m2. This should
   be initialized with all the necessary artifacts if running in
   offline mode.

Additional considerations for running in offline mode:

When running in online mode, there are 3 sources from which files
are downloaded by Maven:
 1 Maven Central
 2 the repository where the tools/base and tools/swt artifacts are
   generated
 3 the prebuilts/tools/common/m2 repository (this is a subset of 1).
Even though 2 and 3 are available locally, we cannot just use them
in offline mode since Maven treats repositories with file:/// urls
as remote as well. As a result, the only way to run offline is to
first explicitly copy the contents of 2 and 3 into the local repository
(-Dmaven.repo.local) before initiating an offline build.