2016-04-13 7 views
1

実行時にjarがあるシステムパスを取得しようとしています。コードの下スカラーでjarシステムパスを取得

はREPLで動作しますが、私はSBTを使用してjarファイルを組み立てた場合、それは失敗し、以下のように

object tboj { 
    def main(args: Array[String]) { 
    def getCurrentDirectory = new java.io.File(".").getCanonicalPath 
    val pwd = getCurrentDirectory 
    println(pwd) 
    } 
} 

SBTエラー、

は、実行 java.lang.RuntimeException:いいえメインクラスが検出されました。 at scala.sys.package $ .error(package.scala:27) [トレース]スタックトレースが抑制されました。最後に実行されましたコンパイル:完全な出力が実行されました。 [エラー](コンパイル:実行)メインクラスが検出されませんでした。 [エラー]合計時間:0秒、4月13日に完成し、2016年5時15分40秒PM

+2

エラーは 'main'の実装とは関係がありません.jarにmain-class属性が含まれていないので、javaはmain関数を見つけることができません。ソリューションについては、http://stackoverflow.com/questions/6467423/how-to-set-main-class-in-buildを参照してください。 –

答えて

1

System.getProperty("user.dir")になります。

私のプロジェクト内のネイティブライブラリを解決するために働いてくれました。

+0

これは、ユーザーのホームディレクトリを取得します。ホームディレクトリは、実行中のアプリケーションのJARファイルが格納されているディレクトリとは異なります。 – Jesper

+0

いいえ、https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.htmlにあります。ユーザー・ホームではなく、ユーザーの作業ディレクトリです。 –

+0

しかし、それはまだOPが求めているものではありません。これは、実行中のアプリケーションのJARがある場所です。 – Jesper

0

あなたはクラス名を使ってJARの場所を検索したい場合は、方法、次の使用println(getClass.getProtectionDomain.getCodeSource.getLocation)

1

を試す -

import org.apache.hadoop.fs.FileSystem 
classOf[FileSystem].getProtectionDomain().getCodeSource().getLocation().toURI().getPath()) 

インスタンスを持っている場合は、以下の方法を使用 -

new ListBuffer[String]().getClass.getProtectionDomain().getCodeSource().getLocation().toURI().getPath() 
関連する問題