首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为tomcat设置java.library.path

为tomcat设置java.library.path
EN

Stack Overflow用户
提问于 2014-06-04 20:25:53
回答 3查看 4.2K关注 0票数 3

我目前正在尝试让Tomcat应用程序运行在带有本地库的Maven上,它需要一个指定的java.library.path。通常,要运行带有路径的Tomcat,必须做一些事情,比如将路径添加到Tomcat:How to add a native library in Tomcat?

但在本例中,我想使用Maven插件运行Tomcat,不幸的是,我找不到任何关于如何为Tomcat-Maven插件设置java.library.path的提示。仅仅用-Djava.library.path=XX设置argLine是行不通的。有没有人知道如何在Tomcat-Maven插件中包含本地库?

根据https://groups.google.com/forum/#!msg/maven-nar/1mz9oWj-65U/dbQEK_6DLdYJ工作的一种方法是使用System.setProperty("java.library.path", javaLibPath);设置路径,然后让类加载器使用

代码语言:javascript
复制
Field field = ClassLoader.class.getDeclaredField("sys_paths");
field.setAccessible(true);
field.set(null, null);

不幸的是,对我来说这是行不通的,无论如何都会抛出错误。(这个提示也是由http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/给出的)。

另一种方法(不是为了解决真正的问题,而是为了解决我不知道在Tomcat-Maven插件中加载set java.library.path的方法)似乎是在程序运行期间添加库,例如:Directory separator should not appear in library name: Macintosh HD/Users/sakkisetty/Documents/dll/FasExtend.dll。不幸的是,这也不起作用。

代码语言:javascript
复制
           File f2 = new File("/home/my/absolute/path");
    for (File f : f2.listFiles()){
        System.out.println("Datei: " + f.getAbsolutePath());
        if (f.isFile() && f.getName().endsWith(".so")){
            System.out.println("Loading: " + f.getAbsolutePath());
            // System.loadLibrary(f.getName());
            System.load(f.getAbsolutePath());
        }
    }

这有两种可能的结果:如果我像这样尝试,就会抛出相同的错误,就好像根本没有加载库一样。如果我使用System.loadLibrary,它找不到库,因为库不在java.library.path中,并且System.loadLibrary不接受绝对路径-所以总的来说,这种方式也不起作用,至少我是这样尝试的。

EN

回答 3

Stack Overflow用户

发布于 2014-08-20 04:31:33

我通过使用MAVEN_OPTSmvn tomcat:run处理opencv_java249.so文件。

简单地执行以下操作:

代码语言:javascript
复制
MAVEN_OPTS=-Djava.library.path=/path/to/your/native/libfolder

工作得很好。我在我的机器上使用了一个绝对路径,它正在工作。不过我还没试过相对的。

票数 0
EN

Stack Overflow用户

发布于 2015-09-16 19:50:46

您可以在您的pom.xml中为tomcat maven插件设置java.library.path,如下所示:

代码语言:javascript
复制
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <systemProperties>
            <java.library.path>${basedir}/libraryfolder</java.library.path>
        </systemProperties>
    </configuration>
</plugin>
票数 0
EN

Stack Overflow用户

发布于 2014-06-13 16:37:36

这个问题的一个可能的解决方案是我用另一种方式(从Setting Djava.library.path programmatically (or alternatives)?)编程设置java.library.path:

代码语言:javascript
复制
private void addJNIPath(String pathToAdd) {
    try {
        Field usrPathsField = ClassLoader.class
                .getDeclaredField("usr_paths");
        usrPathsField.setAccessible(true);

        String[] paths = (String[]) usrPathsField.get(null);

        for (String path : paths)
            if (path.equals(pathToAdd))
                return;

        String[] newPaths = Arrays.copyOf(paths, paths.length + 1);
        newPaths[newPaths.length - 1] = pathToAdd;
        usrPathsField.set(null, newPaths);
    } catch (NoSuchFieldException | SecurityException
            | IllegalArgumentException | IllegalAccessException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

由于这似乎仍然不是一个真正好的解决方案(因为它应该可以通过tomcat以某种方式设置路径),我很高兴听到关于这个问题的其他解决方案。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24037409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档