diff options
author | Håkon Hallingstad <hakon@yahoo-inc.com> | 2017-05-04 12:40:35 +0200 |
---|---|---|
committer | Håkon Hallingstad <hakon@yahoo-inc.com> | 2017-05-04 12:40:35 +0200 |
commit | f5cd0ccdaff4d9622f93ec701a4cebdbf4d57127 (patch) | |
tree | 6c2fade2584a598b3370744aa309fa9abc612a10 /bootstrap.sh | |
parent | d74a4dd574b62f9c8619929d7f919807ff92321d (diff) |
Bootstrap local Java builds
Diffstat (limited to 'bootstrap.sh')
-rwxr-xr-x | bootstrap.sh | 51 |
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 |