• 締切済み

Scalaのmainが見つからないエラー

すみません.またScala初心者の質問ですが教えてください. 以下のようなmainだと何の問題もなく動きます.(あたりまえです) object Main { def main(args: Array[String]): Unit = { def title ="AAA" println("The title='" + title + "'") } } ところがこれを以下のように書き換えて、Eclipseから実行してみたのですが、 import scales.utils._ import ScalesUtils._ import scales.xml._ import ScalesXml._ import java.io._ import parser.strategies._ import scalaz._ import Scalaz._ import scales.xml.jaxen._ object Main { def main(args: Array[String]): Unit = { val doc = loadXml(new java.io.FileReader("MusicLibrary.xml"),defaultPathOptimisation) val root = top(doc) val xpath = ScalesXPath("musicLibrary/cd[string(year) = '1994']/title") val titles = xpath.evaluate(root) titles.foreach(title => println("The title='" + title.toString() + "'")) } } Cannot locate main type 'Main' in project 'ScaleXmlTest'. Check your Run Configuration and make sure that the value of "Main class" is in sync with the package and the type name declared in class 'Main'. のエラーになってしまいます.つまりimportしているライブラリを参照するとおかしくなるように見えます. これはインポートしているライブラリの作り方に問題があるのでしょうか? ちなみに、 Scale XMLは https://github.com/chris-twiner/scalesXml から、 Scalazは https://github.com/scalaz/scalaz からそれぞれ落として、自分でsbtでビルドして.jarを作り、上記のプロジェクトで参照しています. 以上 よろしくお願いします.

みんなの回答

  • racene
  • ベストアンサー率70% (21/30)
回答No.1

どのような設定をしているかわからないため、何が原因か正確にはわかりませんが・・・ * sbtの設定がおかしい * jarがおかしい * そもそもsbtをeclipseから使えるようにしていない のどれでもないなら、もしかすると https://groups.google.com/forum/#!msg/scala-ide-user/__GQS5EmK6U/U6pOE-veTWQJ と同じバグかもしれません。 こちらの場合は scala-ide を最新にすれば直るかと思います。 しかし、sbtを使うならわざわざ自分でソースを落としてきたりしなくて良いのでは・・・?

toshi_xt500
質問者

お礼

ご回答ありがとうございました. エラーメッセージはScala IDEが出していることは確かなようです. https://github.com/scala-ide/scala-ide/blob/master/org.scala-ide.sdt.core/src/scala/tools/eclipse/launching/MainClassVerifier.scala ご指摘のようにScala IDEが悪いのか、こちらの設定が悪いのか判断がつきませんので、一度Scala IDEの方に聞いて見ることにいたします.(IDEは最新です.) > しかし、sbtを使うならわざわざ自分でソースを落としてきたりしなくて良いのでは・・・? はい、初心者なのでたぶんまだsbtのなんたるやすらわかっておりません. 落としてきてsbtでビルドできて御の字です. こちらは別の項目で質問させていただきます. 以上

toshi_xt500
質問者

補足

Eclipseの最新のnightly buildを使ってテストしてみましたが結果は同じでした.ただし、このEclipseのビルドだとプロジェクトでimportしている.jarにエラーがある旨表示してくれます.どうやらそちらが原因のようです.もう一度importしているものをビルドしなおしてみます. 以上

関連するQ&A

  • ScalaでXMLファイルからノードを選択する.

    ScalaでXMLファイルから次のようなXPath式で表されるのノードを選択したくてサンプルプログラムを作ってみました. XPath式:"/musicLibrary/cd[string(year) = '1994']/title" [サンプルプログラム] import scala.xml.XML import scala.xml.Node import scala.xml.Elem object Main { def main(args: Array[String]): Unit = { val root:Elem = XML.loadFile("MusicLibrary.xml") val cds = ((root \\ "musicLibrary" \ "cd") .filter(p => p.asInstanceOf[Elem].child .filter(child => isElem(child) &&(child.asInstanceOf[Elem].label == "year")) .exists(year => year.text == "1994"))) val titles = cds \ "title" titles.foreach(title => println("The title='" + title.text + "'")) } def isElem(node:Node) ={ node match{ case e:Elem => true case _ => false } } } このプログラムで入力XMLファイル(MusicLibrary.xml)の以下が部分が選択され、 <?xml version="1.0" encoding="utf-8"?> <musicLibrary> ... <cd id="4"> <title>The Dark Side of the Moon</title> <year>1994</year> <artist>Pink Floyd</artist> <genre>Rock</genre> </cd> ... </musicLibrary> 一応 The title='The Dark Side of the Moon' とコンソール表示されます. しかし、まったくの初心者のプログラムのため val cds = 以下とval titles=以下は非常に冗長に感じられます. もっとシンプルに目的のノードを選択できるコーディングがありましたらご教授ください. 以上 よろしくお願いいたします.

  • Scalaのmatch式について

    Scala初心者です. 以下のサンプルプログラムを作ってみました. import scala.xml.XML import scala.xml.Node import scala.xml.NodeSeq import scala.xml.Elem import scala.xml.Text import scala.xml object Main { val xmlDoc = <section> <title>Section title</title> <p id="id_001">Paragraph 1</p> <p id="id_002">Paragraph <ph fo="font-weight:bold;">2</ph></p> <p id="id_003">Paragraph <ph fo="font-style:italic;">3</ph></p> </section> def main(args: Array[String]): Unit = { println("Program started") // Select element val secondP = ( (xmlDoc \\ "section") \ "p" filter (_ \ "@id" contains Text("id_002")) ) println(secondP.toString) // Check the result //<p id="id_002">Paragraph <ph fo="font-weight:bold;">2</ph></p> match{ secondP match { case e @ <p>{ ns @ _* }</p> => println("Match!=" + e.toString) case n => println("Not match") } println("Program ended") } } 結果は Program started <p id="id_002">Paragraph <ph fo="font-weight:bold;">2</ph></p> Not match Program ended となります. しかし、 <p id="id_002">Paragraph <ph fo="font-weight:bold;">2</ph></p> match{ case e @ <p>{ ns @ _* }</p> => println("Match!=" + e.toString) case n => println("Not match") } とすると、ちゃんと Match!=<p id="id_002">Paragraph <ph fo="font-weight:bold;">2</ph></p> と表示されます. secondP match { case e @ <p>{ ns @ _* }</p> => println("Match!=" + e.toString) case n => println("Not match") } で"Not match"と表示されてしまうのは何故でしょうか? 以上 よろしくお願いいたします.

  • Transformのエラー

    お世話になります。 XMLを本を見ながら勉強中、Javaを利用してXSLを適用しなくてはならない箇所があり、本に記載の方法で初めてJavaなるものを利用してみたのですが、エラーが出てしまって本来の目的であるXMLの勉強が進まない状況に陥ってしまいました。 解決方法についてご助言いただければ幸いです。 ■環境 J2SE JDK1.5.0_06 OS:Win2K ■状況 DOSより以下のコマンドを走らせました。 C\hoge>java Transform sample1.xml sample1.xsl result.xml エラーは Exception in thread "main" java.lang.NoClassDefFoundError: Transform とのことです。 Transformというクラスファイル(?)が必要なのかと、本の発行者HPに訪れたら"Transform.class"というバイナリファイルが存在していたので、サンプルのxmlファイルがある同一フォルダに落としてから、再度コマンドを打ってみましたが、問題が解決されません。 コンパイル前のTransform.javaも念のため記載します。 よろしくお願い致します。 [Transform.java] import java.io.*; import javax.xml.transform.*; import javax.xml.transform.stream.*; public class Transform { public static void main(String args[]) throws Exception { StreamSource in = new StreamSource(new File(args[0])); StreamSource ss = new StreamSource(new File(args[1])); StreamResult out = new StreamResult(new File(args[2])); TransformerFactory tff = TransformerFactory.newInstance(); Transformer tf = tff.newTransformer(ss); tf.transform(in,out); System.out.println(args[2] + "Output OK!"); } }

    • ベストアンサー
    • Java
  • Java main関数内でStatic変数使えない

    JavaのStatic変数について質問です。 Main関数の中でStaticな変数を定義しようとしたところ、 final修飾子しか使えませんというエラー文言が出ます。 Main関数内でわざわざStatic変数を使用する必要はないのですが、 出来ないと言われると何故だろうと思ってしまいます。 どなたかご説明いただけないでしょうか? -------------------------------------------------------------------- class Test { public static void main(String[] args) { // 宣言時Staticは使えなく、finalでしか定義できないとエラーが出る Static int test_val = 10; // 表示 System.out.println(test_val); } }

    • ベストアンサー
    • Java
  •  Exception in thread "main" java.la

     Exception in thread "main" java.lang.StackOverflowError というエラーが出ます  moji()にtestという変数をいれてやり、mainから、書かそうとしていますが、  Exception in thread "main" java.lang.StackOverflowError というエラーが出ますが、何故かわかりません。  宜しくお願いします。 ************************************************************ public class ArgsTest2 { public static void main(String args[]) { moji(); } public static void moji() { String[] test = {"abcde","fghij"}; main(test); } }

    • ベストアンサー
    • Java
  • Javaのエラーなのですが

    import java.awt.*; import java.awt.event.*; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class PrefTest { public static void main(String args[]) { PrefFrame frm = new PrefFrame("都道府県マスター"); frm.setLocation(300, 200); frm.setSize(250, 350); frm.setBackground(Color.LIGHT_GRAY); frm.setVisible(true); } } と入力しました。コンパイルは出来て、CLASSファイルは作成できたのですが、実行できずにエラーException in thread "main" java.lang.NoClassDefFoundError: PrefTest/javaとなってしまいます。実行するためにはどうしたらよいのでしょうか?

  • ”main”NoClassDefFoundErrorについて

    /*---------------------------------------- KeyEvent のサンプル ----------------------------------------*/ import javax.swing.*; import java.awt.event.*; import java.awt.*; public class KeyEventSample{ JFrame frame = new JFrame("KeyEventは誰が取る?"); Canvas canvas = new Canvas(); public KeyEventSample(){ canvas.setSize(200,200); frame.getContentPane().add(canvas,"Center"); frame.pack(); frame.setVisible(true); KeyListener listener1 = new KeyDealer("frame"); frame.addKeyListener(listener1); KeyListener listener2 = new KeyDealer("canvas"); canvas.addKeyListener(listener2); } public static void main(String[] args){ new KeyEventSample(); } } class KeyDealer extends KeyAdapter{ String name; public KeyDealer(String name){ this.name = name; } public void keyPressed(KeyEvent ke){ System.out.println(name + " got " + ke.getKeyCode()); } } 上記のようなソースファイルをコンパイルし、javaコマンドで起動しようとすると 下記のようなエラーが出ます。いろいろサンプルプログラムを試してみたのですが、すべて同じメッセージです。何か根本的なところでミスがあると思うのですがわかりません。誰か教えていただけないでしょうか。ちなみにSDK1.3を使用しています。 Exception in thread "main" java.lang.NoClassDefFoundError:KeyEventSample/class

    • ベストアンサー
    • Java
  • PHPでのXMLの編集・削除の方法

    XMLの編集・削除をPHPで行いたいと思っています。 その際に、どの要素なのかを指定したいと思うのですが なかなか方法が分からずに困っています。 調べてみて、Xpathを利用して指定し 削除をする時には DOMNode = DOMNode->removeChild(ノード) 編集する時には DOMNode->nodeValue = 値 と、いうものを利用すればいいのかな?と分かってきたのですが 実際、PHPに組み込んでみても、動いてくれず分からなくなっています。 【削除PHP】 foreach ($_POST['number'] as $key => $value){ $xpath = new DOMXPath($doc); $xpath_title = $xpath->query("//title[parent::record/@number=$value]"); //要素ノードの取得 $dataElement = $doc->getElementsByTagName("title")->item(0); //削除 $dataElement->removeChild($xpath_title) or die("削除できません。"); } 【編集PHP】 $xpath = new DOMXPath($doc); $xpath_title = $xpath->query("//record/@number=$session_number"); //値の変更 $session_title = $_SESSION["title"]; $xpath_title->title->nodeValue = $session_title; print $xpath_title->title->nodeValue; 【XML】 <renew>  <record number="000000">   <title>タイトル</title>   <paragraph>内容</paragraph>  </record> </renew> 字数制限の為に、コードも必要最低限だと思われるものしか 記述していません。これでは分からないという事であれば 追記で記述しますので、分かる方は是非教えてください。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 違いを教えてください。

    JAVA初心者です。勉強しててわからない事がたくさん・・・ まず、public static void main(String args[])と    public static void main(String []args) は同じ意味なのでしょうか?そもそも(String args[])の意味がよくわかりません・・・。argsってなんて読んだらいいのでしょうか? あと、extends継承してクラスを使うのと、importでクラスを使うのって意味は同じですか? 最後に、abstract抽象も使い方がよくわかりません。 教えてください!!

    • ベストアンサー
    • Java
  • JavaでのXMLパーサの使用について

    javaでパーサを使ってDOMツリーを作成したいのですが、パーサインスタンスが作成できずにエラーがでてしまいます。ちなみにコンパイルは通ります。 以下にソースとエラー内容を記述しますので、もしよろしかったらどなたか教えて下さい。 import java.io.*; import com.ibm.xml.parsers.*; import org.xml.sax.*; import org.w3c.dom.*; public static void main(String[] args){ try{      //XML文書作成 String xml = "<sample>Hello Java World</sample>"; //DOMパーサ作成 DOMParser parser = new DOMParser(); //入力ストリーム作成      StringReader sr = new StringReader(xml); InputSource is = new InputSource(sr); //パースする parser.parse(is); //ドキュメントを得る Document doc = parser.getDocument(); //トップレベル要素を得る Element el = doc.getDocumentElement(); System.out.println("Top Level Element: " + el.getTagName()); } catch(Exception e){ e.printStackTrace(); } } エラー内容: java.lang.NoClassDefFoundError: com.ibm.xml.parsers.DOMParser java.lang.Throwable(java.lang.String) java.lang.Error(java.lang.String) java.lang.LinkageError(java.lang.String) java.lang.NoClassDefFoundError(java.lang.String) void pkxml.dom.PsDomBean.makedom() void pkxml.dom.PsDomBean.makedom() void pkxmlsutabu.Sutabu.main(java.lang.String [])

専門家に質問してみよう