Thanks Bryan for working on this. I have some comments.
On Tue, 2016-04-05 at 13:35 -0400, Bryan C. Everly wrote:
> Ports@
>
> I have taken a stab at a diff that will allow us to integrate Maven
> based ports into the build process. As you may know, Maven downloads
> dependencies at build time which the good security in our build
> process does not allow, as network access is only on when we are
> downloading the source.
>
> This patch to /usr/ports/devel/jdk/java.port.mk follows in the same
> model as the apache-ant build support that previously existed. I have
> included a tarball of my snakeyaml proposed port to demonstrate how
> the patch works.
>
> I would appreciate your feedback on this as it is the first time I
> have offered a patch to the ports infrastructure.
>
> Patch follows:
>
> Index: java.port.mk
> ===================================================================
> RCS file: /home/cvs/ports/devel/jdk/java.port.mk,v
> retrieving revision 1.34
> diff -u -p -r1.34 java.port.mk
> --- java.port.mk 17 Jun 2015 17:16:04 -0000 1.34
> +++ java.port.mk 5 Apr 2016 00:50:17 -0000
> @@ -110,6 +110,42 @@ do-build:
> . endif
> .endif
>
> +# Allow ports that use devel/maven to set MODJAVA_BUILD=maven
> +# Since maven downloads dependencies at build-time (which is not allowed
> +# in our production builds because we turn on networking support only
> +# for the fetch phase of the build), maven's offline repository support
> +# is used and the port maintainer is expected to supply an archive that
> +# holds the complete set of dependencies needed to build the port.
> +.if defined(MODJAVA_BUILD) && ${MODJAVA_BUILD:L} == "maven"
> +BUILD_DEPENDS += devel/maven
> + MODJAVA_BUILD_DEP_SITE ?=
> + MODJAVA_BUILD_TARGET_NAME ?= package
> + MODJAVA_BUILD_FILE ?= pom.xml
> + MODJAVA_BUILD_DIR ?= ${WRKSRC}
> + MODJAVA_BUILD_ARGS ?=
> + MODJAVA_BUILD_DEP_DIR ?= ${WRKDIR}
> + MODJAVA_BUILD_DEP_SUB ?= local-repo
> + MODJAVA_BUILD_DEP_PKG ?= maven-dependencies.tgz
> + MODJAVA_BUILD_DEP_UNPACK ?= tar
> + MODJAVA_BUILD_DEP_UNPACK_ARGS ?= xzf
> +
> +MODJAVA_BUILD_UNPACK_DEPS = \
> + cd ${MODJAVA_BUILD_DEP_DIR} && \
> + ${SETENV} ${MODJAVA_BUILD_DEP_UNPACK}
> ${MODJAVA_BUILD_DEP_UNPACK_ARGS} ${MODJAVA_BUILD_DEP_PKG}
> +
> +MODJAVA_BUILD_TARGET = \
> + cd ${MODJAVA_BUILD_DIR} && \
> + ${SETENV} ${MAKE_ENV} ${LOCALBASE}/bin/mvn \
> + -f ${MODJAVA_BUILD_FILE} \
> +
> -Dmaven.repo.local="${MODJAVA_BUILD_DEP_DIR}/${MODJAVA_BUILD_DEP_SUB}"
> \
> + -o ${MODJAVA_BUILD_ARGS} ${MODJAVA_BUILD_TARGET_NAME}
I think you should make this simpler and use the current infrastructure
for downloading and extracting a second distfile for the maven
dependencies. The port maintainer should be responsible for putting both
the port distfile and the maven-dependencies distfile into DISTFILES,
using :0 if a second master site is needed.
> +. if !target(do-build)
> +do-build:
> + ${MODJAVA_BUILD_UNPACK_DEPS}
> + ${MODJAVA_BUILD_TARGET}
> +. endif
> +.endif
> +
> # Convenience variables.
> # Ports that install .jar files for public use (ie, in ${MODJAVA_JAR_DIR})
> # please install unversioned .jar files. If a port installs
Try to make your do-build target just do the ${MODJAVA_BUILD_TARGET} and
not do any further extraction. The port maintainer can build the
dependencies distfile such that it extracts correctly in one shot.
I would favor less tunables as well. See if you can reduce all the
MODJAVA_BUILD_DEP_* ones down to one that points to the maven.repo.local
directory directly.
Regards,
-Kurt