[prev in list] [next in list] [prev in thread] [next in thread] 

List:       poi-user
Subject:    Re: 4.1 -> 5.0 results in enormous increase in dependencies and WAR file size
From:       Andreas Beeker <kiwiwings () apache ! org>
Date:       2021-06-20 19:17:30
Message-ID: 90bc290e-92e4-3d41-73e9-ef4a74ae44d0 () apache ! org
[Download RAW message or body]


Hello Jan,

TL;DR: I'm not adding examples on how to use the package manager to achieve a minimal \
POI version, as the components are covered in POI and the package manager exclusions \
are documented in their related sites.


sorry for postponing this nearly one month ... somehow I hoped someone else would \
jump in ...

Missed expectations:
I guess I can understand the irritation - the expectation is to the change the \
dependency version and hopefully everything works as before. We went the way of \
semantic versioning and the POI rule of being able to remove obsolete constructs \
after two major releases. So basically the major version is already a sign that \
things might have changed.

Missed documentation:
The dependencies are actually documented at \
https://poi.apache.org/components/index.html#components

Missed examples:
Some areas of POI are documented well at Stackoverflow and our own example areas, but \
other parts like dissecting the release to a minimal version are indeed not existing. \
For this, we would need to document examples in Ant/Ivy, Maven, Gradle to cover the \
usual package manager and build up a matrix of the usual usages like "a) only use \
XSSF, b) a + encryption, c) use HSSF, d) use XSSF/HSSF" ... and so on with the other \
modules - I think, this would be even more confusing.

Although I just recently faced a similar issues with an unknown to me reactjs/npmjs \
library/environment (... and in the end I've decided to skip that hurdle) - in the \
end you'll need that learning curve of your chosen package manager and the library \
you use. The exclusion mechanism is specific to the package manager and can be easily \
googled by e.g. "gradle exclusion". So for my part I don't think we need detailed \
examples in POIs website on how to exclude parts of the distribution. This would \
actually be counter productive for users using POI on the module-path (JPMS), as you \
wouldn't be able to launch without that dependencies if we just provide a minimal \
version as default and expect users to add modules via "--add-modules" or similar.

Missed patches:
If I couldn't convince you, feel free to submit a documentation patch for getting \
things in the right way.

Missed drive space:
the quote of [1] missed the first sentence "/we have a number of optional \
dependencies ... which can be easily not/included on the classpath/". so to justify \
myself, given the components info (above) + google e.g. "maven exclusion", the drive \
space argument is not so questionable to me.

Missed tests:
The thing which hit me with 5.0.0 is that our tests - which ought to be on JPMS when \
executed on Java 9+ - worked with batik and when POI is used in the real world on the \
module-path it's not working at all. Hence POI 5.0.1 will change the module \
dependencies to batik to static/optional - the package manager dependencies will \
change to the submodules of batik as batik-all is referencing them all again. So you \
need to exclude batik-* - it transitive dependencies like \
xml-apis:xml-apis-ext:1.3.04 should then also be excluded without the need to name \
them explicitly.

So ... I imagine the above is not what you've expected and related only to the \
inquiry of adding package manager examples. If you need further help don't hesitate \
to ping us on the user/dev list.

Andi.


[1] http://apache-poi.1045710.n5.nabble.com/Optional-dependencies-and-JPMS-td5736219.html


On 03.06.21 08:43, Vodolan, Jan wrote:
> Hello,
> Could you mentions these in docs somewhere? Something like "the minimalist example \
> pom.xml" with excludes, and better explanation of what each (optional?) dependency \
> doing ... and possibly links to these discussions. At least, add it to FAQ. Docs \
> components-map is describes these, but without info/example how to get rid \
> (exclude?) of potentionally unnecessary dependencies. Unfortunatelly, it is \
> unintuitive and hidden for common uses. I personally, would prefer oposite way. To \
> be able depend on "?-minimal" version... and add more dependencies if I need them \
> (e.g.: batik). Thanks and have a nice day,
> J.V.
> PS: argument: drive space is not really an issue nowadays ... is at least \
> questinable 



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic