Jochen,

first, this debate might be getting a bit at the moot side: meantime, I have 
decided just to slightly improve my scripts to simply add  groovy/lib/*.jar to 
the classpath for the deployment.

It will make installation of new Groovy versions to the servers a bit more 
difficult than it used to be with -all, but the difference's not that big, and 
after all, we won't install too many Groovys in there — 3.0.4 definitely, one 
or two newer ones possibly if they happen to fix some bug important to us. 4.x 
hardly, too soon for that; and I guess when we do the next refactorisation, 
there'll be 5 or 6 out :)

> On 19 May 2020, at 7:15, Jochen Theodorou <blackd...@gmx.org> wrote:
> On 19.05.20 03:53, OCsite wrote:
>> Well, thanks, I'll check the thing, though at the first look it rather
>> seems to be a tool for a Gradle project owner who wants to move his
>> projects into Xcode. Me, I'm precisely the opposite case — I've got
>> Xcode projects which I /possibly might/ want to move into Gradle.
> 
> I think you need to explain your deployment situation a bit more. Just
> some rough numbers... to how many computers do you deploy

The number of servers changes and I am not sure of it (I do just the 
development, and I work directly with the test servers, but I do not do 
administration of the deployment sites at all, there are much better people for 
that :)), but far as I know, at the moment it's five-odd, presuming to go 
ten-plus in a very near future.

> and how many applications?

At the moment three of them actively developed plus ten-odd more-or-less legacy 
ones, just maintained (some of them waiting to massive refactoring and 
resurrection soon as there's time for that, others waiting to be silently 
forgotten in near future :))

> All Mac?

Most of the servers are, at the moment, CentOS; a couple of them still Macs. As 
mentioned above, I do not maintain the servers myself, my admin skills are not 
that great — but I'm told the client has encountered some hard-to-solve 
problems with newer macOS servers (whilst old ones beginning not to be viable 
alternative due to security holes which Apple does not fix anymore in the 
legacy software) which is, I am told, along with easy and reliable 
virtualisation, the main reason of the move to CentOS.

From my point of view there's essentially no difference, just different 
deployment/extension paths, which our launch script solves automagically based 
on a couple of environment variables.

Anyway, the thing is, we rarely add new functionalities which would need to 
change the list of JARs, and thus we don't really need an automated dependency 
management. During the last, ahem... four or five years, far as I can recall 
without checking the project history files, we added just the aforementioned 
Fop and Apache POI, and for new apps only switched WOnder 6 to WOnder 7; 
nothing else. In general, we rather stick with old versions of everything 
embracing the devil we know (with work-arounds well-tested), instead of 
continuously upgrading and getting thus fixes of known problems (which we don't 
really need, for we already have worked around them) for a price of new unknown 
bugs (which could bit us in our tender parts). Hence, incidentally, also the 
Java 8, and Groovy 2.4- until very recently.

Thus, our set of libraries is pretty at the static side:

- WebObjects JARs which never change and never will
- FrontBase JAR which did not change for years and hardly will in a foreseeable 
future
- WOnder JARs which change every five-odd years when we decide to embrace a new 
release (and even that for new apps only)
- a couple of external JARs for extra functionalities like Fop or POI. Again, 
we never upgrade to newer release unless we have to or unless we refactor the 
whole app
- Groovy JAR (now will become all JARs from /lib) as needed by the Groovy 
version for the particular application.

Again, for the reasons aforementioned, until we refactor our older apps, we 
definitely want to stick with the very Groovy version we tested the app heavily 
against (2.4.17 for most, 2.3.8 for a couple of older ones). Nevertheless we 
just now are refactoring one of our apps very heavily, and for it, I'd like to 
go Groovy 3 (presuming 4 won't be stable enough for some time to come).

>> If at all. I still can't see any advantage it would bring to me. It
>> would automatically maintain dependencies, which is something I have
>> never really needed (at least, not until groovy-all disappeared).
> 
> there have been afaik 2 main reasons to remove groovy-all...
> (1) Java module system (JMS).
> ... At the same time the dependency on the module name is part of the Java
> code now. So if you make one library that depends on groovy-all and one
> that depends on groovy-core you are screwed...

So I can't anymore freely decide whether to classpath lib/*.jar or 
embedded/-all.jar to run one and the same app build?

Brave new world indeed :( Lucky us we stick with Java 8. Looks like lots of fun 
awaits us in future when we are forced to go 9 :(

> (2) People were asking for a smaller groovy jar for years.

I absolutely understand that need for people who embed all the JARs into their 
applications, and deploy the whole monster.

We — perhaps as one rara avis — do otherwise: we strive to put as much of the 
functionality shared amongst our apps as reasonably possible to the Extensions 
folder, only referencing those shared JARs in the classpath. Seems much more 
reasonable to us.

> As I understood it, you care not so much about these points. I assume
> you do not plan to switch to JMS in the next years at all

The more I hear of the thing, the more I intend to dodge it as long as 
reasonably possible :)

>> Besides, I wonder how reliably it could in principle work. Most of the
>> JAR-hell problems we have encountered happened when there were more
>> versions of the same library and some of them did work OK, some of them
>> did not: for example, having added Fop support, we had to
>> remove xmlgraphics-commons-2.3.jar which we used before without any
>> problem, and had to switch back to xmlgraphics-commons-1.5.jar, which
>> works OK with the Fop thing, whilst 2.3 does not[1]. I /do/ wonder
>> whether Gradle or any other auto-dependency manager /could ever/automate
>> properly and without problems /this/? Is there such kind of information
>> anywhere for the manager to do such decisions reliably?
> 
> I am not 100% sure what you mean with "this".

„This“ problem of decision which version of the JAR to use so that it works 
properly, e.g., whether to classpath xmlgraphics-commons-2.3.jar or 
xmlgraphics-commons-1.5.jar.

It's actually a bit at the difficult side: the information of the version used 
for compilation does not suffice, you need also information of inter-version 
backward compatibility and breaking changes. This is what the aforementioned 
OpenStep frameworks did provide, but JARs — far as I know — do not; thus, — 
again only far as I know (and I can be easily wrong!) — such decisions can't be 
automated reliably with JARs and must be left to the user, who would force 
versions manually. (That's essentially the gist of the cesspool what's usually 
called JAR-hell, far as I can say.)

In that case it's infinitely easier not to use a 
semi-automated-tool-which-needs-hints-anyway-otherwise-doesnot-work-well, and 
simply put the JARs needed to the classpath (more or less) manually.

(Perhaps the JMS thing strives to solve this very problem, I don't know. Even 
if so, knowing Java, I don't believe they would to that right — almost nothing 
they ever did :( )

> Right now you manage dependencies manually I assume.

Precisely. Conceptually, I create manually the full contents of the classpath 
(employing a couple of simple scripts which help e.g., to find JARs in 
WO/WOnder frameworks or to auto-add proper JAR /now will be JARs/ for the 
Groovy the app has been built with etc., but that makes no difference in 
principle).

And, very rarely it brought any problems (about the only cases I can recall 
were those when we had to try different versions of a JAR to find the one other 
JARs work with, like the aforementioned xmlgraphics 2.3 vs 1.5; and as I wrote, 
I would be really surprised if this could be automated reliably — could it?)

Thanks and all the best,
OC

Reply via email to