【问题标题】:How to set system property?如何设置系统属性?
【发布时间】:2011-07-08 13:49:29
【问题描述】:

我正在尝试按照此说明进行嵌入式运行门。

它说:“系统属性gate.home应该设置为gate安装目录。” (http://gate.ac.uk/wiki/code-repository/)

我该怎么做?

此外,当我尝试运行 EmbeddedAnnie 的示例代码时,我收到以下错误: (不知道有没有关系)。

Initialising GATE...
GATE home system property ("gate.home") not set.
Attempting to guess...
Using "C:\Program Files (x86)\GATE-6.0" as GATE Home.
If this is not correct please set it manually using the -Dgate.home option in yo
ur start-up script
Using C:\Program Files (x86)\GATE-6.0 as GATE home
Using C:\Program Files (x86)\GATE-6.0\plugins as installed plug-ins directory.
Using C:\Program Files (x86)\GATE-6.0\gate.xml as site configuration file.
Using C:\Users\UNST\gate.xml as user configuration file
Using C:\Users\UNST\gate.session as user session file
Exception in thread "main" java.lang.NoClassDefFoundError: gate/creole/gazetteer
/AbstractGazetteer
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:14
1)
        at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
        at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
        at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:296)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:296)
        at gate.util.GateClassLoader.loadClass(GateClassLoader.java:63)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        at gate.creole.CreoleAnnotationHandler.processAnnotationsForResource(Cre
oleAnnotationHandler.java:193)
        at gate.creole.CreoleAnnotationHandler.processAnnotations(CreoleAnnotati
onHandler.java:169)
        at gate.creole.CreoleAnnotationHandler.processAnnotations(CreoleAnnotati
onHandler.java:173)
        at gate.creole.CreoleAnnotationHandler.processAnnotations(CreoleAnnotati
onHandler.java:173)
        at gate.creole.CreoleAnnotationHandler.processAnnotations(CreoleAnnotati
onHandler.java:157)
        at gate.creole.CreoleRegisterImpl.processFullCreoleXmlTree(CreoleRegiste
rImpl.java:358)
        at gate.creole.CreoleRegisterImpl.parseDirectory(CreoleRegisterImpl.java
:341)
        at gate.creole.CreoleRegisterImpl.registerDirectories(CreoleRegisterImpl
.java:306)
        at gate.Gate.initCreoleRepositories(Gate.java:449)
        at gate.Gate.init(Gate.java:230)
        at StandAloneAnnie.main(StandAloneAnnie.java:69)
Caused by: java.lang.ClassNotFoundException: gate.creole.gazetteer.AbstractGazet
teer
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 27 more

【问题讨论】:

    标签: java


    【解决方案1】:

    您可以通过多种方式做到这一点。

    一个是当你运行你的应用程序时,你可以给它一个标志。

    java -Dgate.home="http://gate.ac.uk/wiki/code-repository" your_application

    或者在需要此属性集的代码之前以编程方式在代码中设置它。 Java 为System 宽配置保留了一个Properties 对象。

    Properties props = System.getProperties();
    props.setProperty("gate.home", "http://gate.ac.uk/wiki/code-repository");
    

    【讨论】:

    • +1 - 但是,以编程方式设置系统属性的问题是您需要尽早完成;即在“门”代码使用属性值之前。
    • @StephenC,是的,比如设置java.system.class.loader等
    • @Pacerier - 这是一个仅在命令行设置时有效的属性示例。
    • @StephenC,那是因为使用属性值的“门”代码在用户代码的第一行之前。
    • @Sayantan 除了我在 7 年前写下这个答案之外没有其他原因,而且我的 Java 经验远不如现在发达。
    【解决方案2】:
    System.setProperty("gate.home", "/some/directory");
    

    有关详细信息,请参阅:

    【讨论】:

    • 那我是在main函数里做这个吗?
    • @Flethuseo,是的,这对于一个简单的应用程序来说应该没问题。
    【解决方案3】:
    System.setProperty("gate.home", "/some/directory"); 
    

    之后,您可以稍后通过调用来检索其值

    String value =  System.getProperty("gate.home");
    

    【讨论】:

    • 请解释一下。
    【解决方案4】:

    对于 JBoss,在standalone.xml 中,放在 .

    <extensions>
    </extensions>
    
    <system-properties>
        <property name="my.project.dir" value="/home/francesco" />
    </system-properties>
    

    对于日食:

    http://www.avajava.com/tutorials/lessons/how-do-i-set-system-properties.html?page=2

    【讨论】:

    • 我就是为了这个!不知何故,在 JBoss 中,我们设置系统属性的其他地方不起作用。
    【解决方案5】:

    您需要本地 GATE 安装的插件目录的路径。所以如果Gate安装在“/home/user/GATE_Developer_8.1”,代码如下:

    System.setProperty("gate.home", "/home/user/GATE_Developer_8.1/plugins");
    

    您不必从命令行设置gate.home。你可以在你的应用程序中设置它,只要你在调用 Gate.init() 之前设置它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-03
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多