問題
- グローバルクラスパスからライブラリを読み込むと、Liferay の内部モジュール の 1 つと競合する
Caused by: java.lang.ClassNotFoundException: org.apache.commons.compress.archivers.zip.ZipFile
at java.net.URLClassLoader.findClass(URLClassLoader.java:382) ~[?:1.8.0_275]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_275]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_275]
at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_275]
at java.lang.ClassLoader.defineClass(ClassLoader.java:756) ~[?:1.8.0_275]
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) ~[?:1.8.0_275]
at java.net.URLClassLoader.defineClass(URLClassLoader.java:468) ~[?:1.8.0_275]
at java.net.URLClassLoader.access$100(URLClassLoader.java:74) ~[?:1.8.0_275]
at java.net.URLClassLoader$1.run(URLClassLoader.java:369) ~[?:1.8.0_275]
at java.net.URLClassLoader$1.run(URLClassLoader.java:363) ~[?:1.8.0_275]
at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_275]
at java.net.URLClassLoader.findClass(URLClassLoader.java:362) ~[?:1.8.0_275]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_275]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_275]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_275]
at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_275]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1391) ~[catalina.jar:9.0.56]
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215) ~[catalina.jar:9.0.56]
at com.liferay.shielded.container.internal.ShieldedContainerClassLoader.findClass(ShieldedContainerClassLoader.java:79) ~[com.liferay.shielded.container.impl.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_275]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_275]
at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:431) ~[org.eclipse.osgi.jar:?]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:419) ~[org.eclipse.osgi.jar:?]
at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:411) ~[org.eclipse.osgi.jar:?]
at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:151) ~[org.eclipse.osgi.jar:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_275]
at org.apache.tika.parser.microsoft.ooxml.OOXMLParser.<clinit>(OOXMLParser.java:41) ~[?:?]
at java.lang.Class.forName0(Native Method) ~[?:1.8.0_275]
at java.lang.Class.forName(Class.java:348) ~[?:1.8.0_275]
at org.apache.tika.config.ServiceLoader.getServiceClass(ServiceLoader.java:235) ~[?:?]
at org.apache.tika.config.TikaConfig$XmlLoader.loadOne(TikaConfig.java:628) ~[?:?]
at org.apache.tika.config.TikaConfig$XmlLoader.loadOverall(TikaConfig.java:589) ~[?:?]
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:198) ~[?:?]
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:182) ~[?:?]
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:157) ~[?:?]
at org.apache.tika.config.TikaConfig.<init>(TikaConfig.java:153) ~[?:?]
at com.liferay.portal.tika.internal.util.TikaConfigUtil.<clinit>(TikaConfigUtil.java:33) ~[?:?]
at com.liferay.portal.tika.internal.metadata.TikaRawMetadataProcessor.<init>(TikaRawMetadataProcessor.java:91) ~[?:?]
... 376 more
Environment
- Liferay DXP 7.4
解決策
-
モジュールを作成し、
compileInclude
poi jars を作成し、Export-Package
bnd.bnd ファイルで指示し、poi を公開します。 それを使用する他のモジュールはまだそれらにアクセスすることができ、あなたはバンドルの更新時にジャーのコピーを心配する必要がないという利点を得ることができます。 poiが持つ依存関係はすべてモジュールに埋め込むことができるので、依存関係が重なることはなく、Liferayのバージョンとの競合を心配する必要はありません。 bnd.bndファイルでは(そして多分Export-Packageディレクトリでも)、使用しているPOIのバージョン番号を使用してください、それもOSGiが範囲外のバージョンへのバインドを防ぐのに役立ちます。