【问题标题】:Java classpath search issue: direct setting vs using environment variablesJava 类路径搜索问题:直接设置与使用环境变量
【发布时间】:2014-02-22 05:26:00
【问题描述】:

我有一个从 Java 调用的 Scala 库。

这是 Scala 代码。

package org.fun

object ScalaPower{
  def showMyPower(time:Int) = {
    (0 to time-1).mkString(", ")
  }
}

这是 Java 代码。

import org.fun.*;

public class Test {
    public static void main(String args[]) {
       System.out.println("show my power: " + ScalaPower.showMyPower(3));       
    }
}

使用此构建脚本:

SCALA_LIB=~/bin/jar/scala/scala-library.jar

scalac -d ~/temp/java s.scala
javac -cp .:~/temp/java:$SCALA_LIB Test.java -d ~/temp/java
java -cp .:~/temp/java:$SCALA_LIB Test

我有错误。

Test.java:1: error: package org.fun does not exist
import org.fun.*;
^
Test.java:5: error: cannot find symbol
       System.out.println("show my power: " + ScalaPower.showMyPower(3));       
                                              ^
  symbol:   variable ScalaPower
  location: class Test
2 errors

有趣的是,当我从环境变量中获取类路径时,我没有任何问题。

SCALA_LIB=~/jar/scala/scala-library.jar
JP=.:~/temp/java:~/temp/java2:$SCALA_LIB

scalac -d ~/temp/java s.scala
scalac -d ~/temp/java2 s2.scala
javac -cp $JP Test.java -d ~/temp/java
java -cp $JP Test

这是为什么?我是否必须始终使用环境变量来设置带有-cp 的类路径?还是我犯了一些错误?我检查了 Mac OS X 和 Linux;他们都使用 $JP,但不使用直接路径征用。

代码复制自这篇帖子:How do you call a Scala singleton method from Java?

【问题讨论】:

    标签: java classpath javac scalar


    【解决方案1】:

    我应该使用环境变量作为 -cp 的参数。 我检查了 Mac OS X 和 Linux;他们都使用 $JP,但不使用直接路径登记。

    SCALA_LIB=~/jar/scala/scala-library.jar
    JP=.:~/temp/java:~/temp/java2:$SCALA_LIB
    
    scalac -d ~/temp/java s.scala
    scalac -d ~/temp/java2 s2.scala
    javac -cp $JP Test.java -d ~/temp/java
    java -cp $JP Test
    

    【讨论】:

      猜你喜欢
      • 2019-03-18
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-04
      • 2012-10-28
      • 2022-11-27
      • 2013-05-21
      相关资源
      最近更新 更多