我们已经开始使用此版本的新内部构建授权库。它在内部加载一个本机文件.so
,然后执行它所拥有的任何内容(之前它基于正则表达式)。
现在在我们的应用程序中,我们有2个不同的war文件,这些文件部署在生产中的同一个tomcat上。它们都使用此授权库,因此这两个类加载器都尝试两次加载本机文件。 jvm当然不允许哪一个,因为你只能加载一次。
java.lang.UnsatisfiedLinkError: Native Library /usr/lib64/xxxx-0.1.0.so already loaded in another classloader
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1903)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1855)
at java.lang.Runtime.loadLibrary0(Runtime.java:870)
at java.lang.System.loadLibrary(System.java:1122)
....
这个问题的一个解决方案是,我们将这个授权jar放在tomcat / lib中。因为tomcat公共类加载器加载它,它们自动可用于子类加载器(所以war文件),每个人都可以访问它。但这个解决方案需要特殊维护。而且我不喜欢这种调整。如果可能的话,我可以在我的maven pom中做一些配置。
这种问题还有其他更简单的解决方案吗?它是纯粹的弹簧应用,以maven为基础。