Java类路径搜索问题:直接设置与使用环境变量

时间:2014-01-30 03:56:04

标签: java classpath javac scalar

我有一个从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?

1 个答案:

答案 0 :(得分:0)

我应该将环境变量用于-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