Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Apr 2017 23:29:23 +0300
From:      Dmytro Bilokha <dmytro@posteo.net>
To:        Xavi Garcia <xavi.garcia@gmail.com>
Cc:        freebsd-ports@freebsd.org, owner-freebsd-ports@freebsd.org
Subject:   Re: Writing a port that needs to download a large number of files
Message-ID:  <39470c3e111a92fd41ad183a77ccc2ac@posteo.net>
In-Reply-To: <CAPonemzuMLP5CdBzkTp__1GGarm%2Bocda5TiCmjYp7tQ1Bk1KVg@mail.gmail.com>
References:  <CAPonemzuMLP5CdBzkTp__1GGarm%2Bocda5TiCmjYp7tQ1Bk1KVg@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help

On 19.04.2017 19:27, Xavi Garcia wrote:
> Hi all,
> 
> We are writing a port for a Java software that downloads a large number 
> of
> jar files (around 200) with Gradle (https://gradle.org/), that is 
> similar
> to other package managers like Pip or Ruby Gems but for Java projects.
> 
> What would be the best practice in this scenario? I am aware that we 
> can
> only download files in the fetch phase but I am not sure if my solution 
> is
> clean enough.
> 
> We will be deploying this port in our servers via Portshaker and 
> Poudriere
> but we would also like to commit it to the ports tree.
> 
> 
> In short, I am using the 'pre-fetch' phase together with FETCH_DEPENDS  
> to
> drop the Gradle wrapper in ${DISTDIR}/${PORTNAME} and then I use the
> 'dependencies' task to download all the dependencies.
> 
> The 'do-build' stage will run again the Gradle wrapper to build the
> software, but using the offline mode.
> 
> You can find attached the Makefile.
> 
> Kind regards,
> 
> Xavier Garcia

Hi!
If you need examples of the "best practice",
probably, you can take a look at already exsisting
ports of Java software.

For example, I've checked the Glassfish port and
it was made with different approach:
1. During fetch phase distribution zip-file with
already compiled Java classes is downloaded.
2. Then it is unzipped to some directory, like
/usr/local/glassfish.
3. Some scripts put, package registered, etc.

So here there is no building of Java app from sources,
mostly fetching already built, some tweaking and putting
to the right place.
I saw similar procedure for some another ports
of Java software.

I am not sure, but it seems because of such reasons:
1. With Java you won't gain a lot with building application
from sources. If OS has JVM you can just run already
compiled -- it should work.
2. For port its better to have as least dependencies,
as possible. So, making your port dependent on
Gradle (which fast evolving itself) and/or another
Java build tooling can make port fragile and not
very stable.
3. Building the big Java project from sources could be
time and traffic consuming task. Usualy users
don't like this.

---
Best regards,
Dmytro Bilokha



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?39470c3e111a92fd41ad183a77ccc2ac>