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