reckart opened a new issue, #431:
URL: https://github.com/apache/uima-uimaj/issues/431
**Describe the bug**
When using a PEAR file, UIMA will typically first use classes from the PEAR
before loading classes through the default class loader. This allows PEARs to
keep private versions of libraries that may conflict with those embedded in
other PEARs.
However, a problem occurs if an SPI provider is defined outside a PEAR and
inside a PEAR at the same time. Specifically:
* Outside the PEAR, we already use UIMA 3.6.0 and the `TypeSystemProvider`
SPI. So we have some `/META-INF/services/...TypeSystemProvider` file that
points to `my.FooTypeSystemProvider`
* Inside the PEAR, we have an older version of that
`my.FooTypeSystemProvider` (e.g. built against UIMA 3.5.0) and this class does
not yet implement the `TypeSystemProvider` interface
* The Java `ServiceLoader` will find the
`/META-INF/services/...TypeSystemProvider` file outside the PEAR and then try
loading the class - but the class loaded will be found inside the PEAR and will
not implement the interface. This cause the `ServiceLoader` to fail, claiming
that the class does not implement the required interface (which indeed it does
not).
**Expected behavior**
No error. We should probably not consider SPIs in PEARs at all. UIMA should
probably not allow the discovery of SPIs declared or implemented within PEARs.
PEARs may come with their own type system definitions and JCas classes, but it
should not be necessary to discover those through SPIs. Discovery through SPIs
should only be necessary for the "global" context, i.e. outside PEAR files.
**Please complete the following information:**
- Version: 3.6.0
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]