aboutsummaryrefslogtreecommitdiffstats
path: root/bootstrap.sh
diff options
context:
space:
mode:
authorhakonhall <hakon@yahoo-inc.com>2017-05-05 12:39:37 +0200
committerGitHub <noreply@github.com>2017-05-05 12:39:37 +0200
commit0b76c8884eee6e41fc1e2e1c2aec2d89cf5a96ca (patch)
tree82303bd205207ccd0e0f0b9d4b9f7a1f06915adc /bootstrap.sh
parent522e0359ddbb351f6ad09fc355ecc14d2f02c717 (diff)
Revert "Revert "Bootstrap local Java builds""
Diffstat (limited to 'bootstrap.sh')
-rwxr-xr-xbootstrap.sh51
1 files changed, 35 insertions, 16 deletions
diff --git a/bootstrap.sh b/bootstrap.sh
index 940179ef020..40aa7eb3a21 100755
--- a/bootstrap.sh
+++ b/bootstrap.sh
@@ -14,8 +14,11 @@ elif [ "$1" = "full" ]; then
elif [ "$1" = "java" ]; then
# Build minial set of java modules requires to run mvn install from the source root
MODE=java
+elif [ "$1" = "java-build" ]; then
+ # Bootstrap as with "java", then build by passing $2 $3 ... to mvn.
+ MODE=java-build
elif [ "$1" = "default" ]; then
- :
+ MODE=default
elif [ "$1" = "-h" -o "$1" = "--help" ]; then
usage
exit 0
@@ -26,30 +29,46 @@ else
fi
mvn_install() {
- mvn install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true $@
+ mvn install -Dmaven.test.skip=true -Dmaven.javadoc.skip=true "$@"
}
# Generate vtag map
top=$(dirname $0)
$top/dist/getversion.pl -M $top > $top/dist/vtag.map
-# These modules are required to be available to maven for it to calculate the
-# Vespa java dependency graph.
-MODULES="
- .
- annotations
- scalalib
- bundle-plugin
- "
-
-for module in $MODULES; do
- (cd $module && mvn_install -N)
-done
+# NOTES ON BUILDING JAVA MODULES
+#
+# When building a random module like orchestrator, mvn lists 2 plugins as
+# prerequisites in the Reactor summary: bundle-plugin and config-class-plugin.
+#
+# It appears mvn is unable to resolve references to a plugin, if the same mvn
+# program builds the plugin, e.g. getting missing class errors.
+#
+# Therefore, we need to manually build all plugins first, then ensure we build
+# the rest of module without rebuilding the plugins (mvn's -rf). To be more
+# exact, mvn displays the order of modules it will build in the Reactor summary
+# - we need to build all modules up to and including all plugins in that list:
+# . (i.e. parent), annotations, scalalib, bundle-plugin, yolean, vespajlib,
+# configgen, and config-class-plugin. By using mvn -rf we can combine the
+# building of several of these into fewer commands to save time.
+#
+# After bootstrapping, the following mvn command must use -rf to avoid building
+# the plugins again: java-build helps remembering this. So to bootstrap the
+# building of the orchestrator modules and all of its dependencies, do:
+# 'bootstrap.sh java-build -pl orchestrator'.
-mvn_install -am -pl config-class-plugin -rf configgen
+mvn_install -am -pl bundle-plugin
+mvn_install -am -rf configgen -pl config-class-plugin
case "$MODE" in
- java)
+ java*)
+ mvn_install -am -rf yolean -pl vespajlib
+
+ if test "$MODE" == java-build
+ then
+ shift
+ mvn_install -rf config-lib -am "$@"
+ fi
;;
full)
mvn_install -am -pl filedistributionmanager,jrt,linguistics,messagebus -rf yolean