Demo zu Lucene kompilieren mit Eclipse

Markus Everson

Grand Admiral Special
Mitglied seit
22.10.2004
Beiträge
6.787
Renomée
270
Standort
Deutschland
Hi,

gibts hier jemanden der Eclipse / Java beherscht, also nicht nur soweit das er sich gerade mal eben durchmogelt sondern so das er wirklich weiß was er tut?

Ich sitzte seit heute Morgen an Lucene und den diversen Webressourcen und hab schon ein Stück aus der Tischkante heraus gebissen weil ich einfach nicht dahinter komme wie ich die Demo übersetzen muss. Er kann die Imports nicht auflösen. Muss ich das ganze Riesenteil mit seinen 3^18 Tools die jeweils wieder 3^27 weitere Unter-Tools benötigen komplett übersetzen oder kann ich ihm "irgendwie" die jar-Dateien bekannt machen? Letzteres habe ich versucht, aber nicht hin bekommen.
 
Hallo,

also ich kenne jetzt das konkrete Projekt was du bauen willst nicht, aber ich habe schon größere Projekte in Eclipse gebaut mit mehreren externen Abhängigkeiten.
Bei den Abhängigkeiten kannst du erstmal grob in zwei Kategorien unterteilen:
1. Libraries die schon fertig gebaut sind und als JAR zur Verfügung stehen.
2. Libraries die man selbst kompilieren muss und als Projekt im Workspace hat.

Bei den ersten muss man nur mit Rechtsklick auf das Projekt gehen im Project Explorer->Properties->Java Build Path->Libraries->Add Jars bzw. Add external Jar und dort die entsprechenden Bibliotheken auswählen.

Bei den anderen geht das unter Properties->Project References und da die entsprechenden Projekte im Workspace anhaken. Eine zweite Möglichkeit wäre natürlich die vorher einzeln zu bauen und als JAR zu exportieren, aber das ist eigentlich nicht nötig und vor allem umständlich, wenn man selbst Änderungen vornehmen will.

Um solche Buildkonflikte zu lösen gehe ich meistens so vor:

  • schrittweise die Fehlermeldungen in Problems abarbeiten
  • wenn eine Klasse/ein Paket nicht gefunden werden kann mit Hilfe von der Suche ermitteln in welcher Datei diese Klasse ist
  • das entsprechende Projekt dann bei den Project References des anderen Projektes eintragen
  • falls die Klasse oder das Paket nicht im Workspace zu finden ist, im Internet suchen aus welcher Library es stammt und dann diese als fertig gebaute Jar laden und zum Projekt hinzufügen. Manchmal sind sie auch schon in einem extra lib Ordner im Projekt schon vorhanden. Also zuerst nach sowas suchen.

Hoffe diese Tips helfen dir weiter die Probleme zu beheben.

Grüße

Marcel

Edit: Und das wichtigste bei Eclipse: ganz oft F5 drücken oder manchmal auch Eclipse neu starten!!! ;) Manchmal buggt es einfach und zeigt alte Fehler immer noch an.
 
Zuletzt bearbeitet:
Hallo,

gibt es schon Fortschritte zu berichten?

Grüße

Marcel
 
Was ist denn das nun schon wieder? Hab mir beim schließen meinen gesamten Workspace zerhauen und keine Ahnung wie ich das gewohnte Layout wieder herstelle. Hat jemand nen Tipp?

Wenn ich in dem Tempo weiter mache dauert das aber noch bis zur ersten mit Software verdienten Million...

[Edit]
Google war mein Freund. Der hier schreibt

Click on Window in the top nav, then click on Open Perspective, then click on Other, then click on Java EE (or you could use Java). Then click on Window again, and click on Reset Perspective.

Danke red5guide.com, hat funktioniert.

Edit2: So, die Demo läuft jetzt. Allerdings nicht mit dem Holz- sondern gleich mit Thors Hammer reingeprügelt. Ich hab aus der Binary Distribution von Lucene alle 26 jar Files in ein Verzeichnis kopiert und dann in den Classpath zugefügt.

Na gut, der Index ist mit mir. Jetzt gehts an die eigentliche Arbeit.
 
Zuletzt bearbeitet:
Zu früh gefreut.
Ich konnte in der Demo den Namen der vorhandenen Einträge ändern. Nach dem Compilieren lief die Ausgabe mit dem geänderten Source. Nun wollte ich aber den Index um ein Feld erweitern. Woraufhin er mir wieder Build error an den Kopf schmeißt:
BUILD FAILED
E:\Daten\Java\lucene-4.2.1\common-build.xml:656: The following error occurred while executing this line:
E:\Daten\Java\lucene-4.2.1\common-build.xml:361: The following error occurred while executing this line:
E:\Daten\Java\lucene-4.2.1\common-build.xml:398: Ivy is not available

Wozu braucht er denn Ivy? Bzw. braucht er Ivy..oder hab ich doch noch einen Fehler in meiner Vorgehensweise?
 
Das Vorgehen an sich ist schon richtig, wobei es eigentlich genügt, die direkt benötigten Jars anzugeben. In diesen Jars ist im Manifest dann angegeben, welche Jars sie brauchen - wenn dann alles in einem Verzeichnis liegt, sollte das ausreichen.

Woher nun eine Abhängigkeit zu Ivy kommt, musst du mal nachschauen. Gerade bei Lucene ist es ja so, dass viele Funktionen in Erweiterungs-Jars liegen, die dann vielleicht wieder andere Abhängigkeiten mit sich bringen.
Sollte aber alles dokumentiert sein!?

Das Verwalten von Jars kann aber die Hölle sein, klar. Wir hatten deshalb mal eine riesige Ant-Logik aufgebaut, mit Jars von einem Server holen etc.
Der moderne und leichtere Ansatz ist aber, einfach Maven zu verwenden. Das ist mit Einarbeitungsarbeit verbunden: Projektstruktur anpassen, mit pom.xml auseinandersetzen, konfigurieren, etc.
Aber wenn dich das Auflösen von Abhängigkeiten nervt, ist das wohl der Weg, den du gehen willst.

edit: Dein Lucene-Index kann nichts mit Ivy zu tun haben.
 
Zuletzt bearbeitet:
erstmal: Danke!

Wenn maven optional ist will ich den als zusätzliche Fehlerquelle erstmal außen vor lassen. Mein Motto: Man gebe mir einen festen Punkt (ein Projekt/batchfile das so wie es da steht zu einer lauffähigen Demo führt) und ich hebe die Welt aus den Angeln. Bisher ist aber schon das erstellen einer Mini-Demo gescheitert. :-(
Ich bin daher jetzt erstmal von Eclipse weg und auf die Kommandozeile (jetzt in einer Debian VM) zurück gekehrt. Eine Fehlerquelle weniger.

http://www.guguncube.com/754/lucene-4-getting-started-demo-file-search-1 liefert eine ganz gute Ausgangsbasis. Damit kann ich aber nur die bereits vorkompilierte Demo starten, nicht selber ein Java-File kompilieren und dabei die Lucene JARs verwenden. Ich bleibe dran und berichte weiter.
.
EDIT :
.

Weiter gehts.

Hier ist der Java Source den ich zum fliegen bringen möchte.

Code:
package com.lucenetutorial.apps;

import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.DirectoryReader;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.queryparser.classic.QueryParser;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopScoreDocCollector;
import org.apache.lucene.store.FSDirectory;
import org.apache.lucene.util.Version;

import java.io.*;
import java.util.ArrayList;

/**
 * This terminal application creates an Apache Lucene index in a folder and adds files into this index
 * based on the input of the user.
 */
public class TextFileIndexer {
  private static StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_40);

  private IndexWriter writer;
  private ArrayList<File> queue = new ArrayList<File>();


  public static void main(String[] args) throws IOException {
    System.out.println("Enter the path where the index will be created: (e.g. /tmp/index or c:\\temp\\index)");

    String indexLocation = null;
    BufferedReader br = new BufferedReader(
            new InputStreamReader(System.in));
    String s = br.readLine();

    TextFileIndexer indexer = null;
    try {
      indexLocation = s;
      indexer = new TextFileIndexer(s);
    } catch (Exception ex) {
      System.out.println("Cannot create index..." + ex.getMessage());
      System.exit(-1);
    }

    //===================================================
    //read input from user until he enters q for quit
    //===================================================
    while (!s.equalsIgnoreCase("q")) {
      try {
        System.out.println("Enter the full path to add into the index (q=quit): (e.g. /home/ron/mydir or c:\\Users\\ron\\mydir)");
        System.out.println("[Acceptable file types: .xml, .html, .html, .txt]");
        s = br.readLine();
        if (s.equalsIgnoreCase("q")) {
          break;
        }

        //try to add file into the index
        indexer.indexFileOrDirectory(s);
      } catch (Exception e) {
        System.out.println("Error indexing " + s + " : " + e.getMessage());
      }
    }

    //===================================================
    //after adding, we always have to call the
    //closeIndex, otherwise the index is not created    
    //===================================================
    indexer.closeIndex();

    //=========================================================
    // Now search
    //=========================================================
    IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(indexLocation)));
    IndexSearcher searcher = new IndexSearcher(reader);
    TopScoreDocCollector collector = TopScoreDocCollector.create(5, true);

    s = "";
    while (!s.equalsIgnoreCase("q")) {
      try {
        System.out.println("Enter the search query (q=quit):");
        s = br.readLine();
        if (s.equalsIgnoreCase("q")) {
          break;
        }
        Query q = new QueryParser(Version.LUCENE_40, "contents", analyzer).parse(s);
        searcher.search(q, collector);
        ScoreDoc[] hits = collector.topDocs().scoreDocs;

        // 4. display results
        System.out.println("Found " + hits.length + " hits.");
        for(int i=0;i<hits.length;++i) {
          int docId = hits[i].doc;
          Document d = searcher.doc(docId);
          System.out.println((i + 1) + ". " + d.get("path") + " score=" + hits[i].score);
        }

      } catch (Exception e) {
        System.out.println("Error searching " + s + " : " + e.getMessage());
      }
    }

  }

  /**
   * Constructor
   * @param indexDir the name of the folder in which the index should be created
   * @throws java.io.IOException when exception creating index.
   */
  TextFileIndexer(String indexDir) throws IOException {
    // the boolean true parameter means to create a new index everytime, 
    // potentially overwriting any existing files there.
    FSDirectory dir = FSDirectory.open(new File(indexDir));


    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_40, analyzer);

    writer = new IndexWriter(dir, config);
  }

  /**
   * Indexes a file or directory
   * @param fileName the name of a text file or a folder we wish to add to the index
   * @throws java.io.IOException when exception
   */
  public void indexFileOrDirectory(String fileName) throws IOException {
    //===================================================
    //gets the list of files in a folder (if user has submitted
    //the name of a folder) or gets a single file name (is user
    //has submitted only the file name) 
    //===================================================
    addFiles(new File(fileName));
    
    int originalNumDocs = writer.numDocs();
    for (File f : queue) {
      FileReader fr = null;
      try {
        Document doc = new Document();

        //===================================================
        // add contents of file
        //===================================================
        fr = new FileReader(f);
        doc.add(new TextField("contents", fr));
        doc.add(new StringField("path", f.getPath(), Field.Store.YES));
        doc.add(new StringField("filename", f.getName(), Field.Store.YES));

        writer.addDocument(doc);
        System.out.println("Added: " + f);
      } catch (Exception e) {
        System.out.println("Could not add: " + f);
      } finally {
        fr.close();
      }
    }
    
    int newNumDocs = writer.numDocs();
    System.out.println("");
    System.out.println("************************");
    System.out.println((newNumDocs - originalNumDocs) + " documents added.");
    System.out.println("************************");

    queue.clear();
  }

  private void addFiles(File file) {

    if (!file.exists()) {
      System.out.println(file + " does not exist.");
    }
    if (file.isDirectory()) {
      for (File f : file.listFiles()) {
        addFiles(f);
      }
    } else {
      String filename = file.getName().toLowerCase();
      //===================================================
      // Only index text files
      //===================================================
      if (filename.endsWith(".htm") || filename.endsWith(".html") || 
              filename.endsWith(".xml") || filename.endsWith(".txt")) {
        queue.add(file);
      } else {
        System.out.println("Skipped " + filename);
      }
    }
  }

  /**
   * Close the index.
   * @throws java.io.IOException when exception closing
   */
  public void closeIndex() throws IOException {
    writer.close();
  }
}

Nach der Methode "Thors Hammer" compiliere ich das wie folgt:

Code:
javac TextFileIndexer.java -classpath :/home/markus/build/lucene-test/Java.jar/commons-codec-1.7.jar:/home/markus/build/lucene-test/Java.jar/commons-compress-1.4.1.jar:/home/markus/build/lucene-test/Java.jar/icu4j-49.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-common-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-icu-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-kuromoji-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-morfologik-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-phonetic-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-smartcn-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-stempel-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-analyzers-uima-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-benchmark-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-classification-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-codecs-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-core-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-demo-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lucene-queryparser-4.2.1.jar:/home/markus/build/lucene-test/Java.jar/lukeall.jar:/home/markus/build/lucene-test/Java.jar/morfologik-fsa-1.5.5.jar:/home/markus/build/lucene-test/Java.jar/morfologik-polish-1.5.5.jar:/home/markus/build/lucene-test/Java.jar/morfologik-stemming-1.5.5.jar:/home/markus/build/lucene-test/Java.jar/nekohtml-1.9.17.jar:/home/markus/build/lucene-test/Java.jar/randomizedtesting-runner-2.0.8.jar:/home/markus/build/lucene-test/Java.jar/Tagger-2.3.1.jar:/home/markus/build/lucene-test/Java.jar/uimaj-core-2.3.1.jar:/home/markus/build/lucene-test/Java.jar/WhitespaceTokenizer-2.3.1.jar:/home/markus/build/lucene-test/Java.jar/xercesImpl-2.9.1.jar

Ergebnis: Er motzt zwar, erzeugt aber eine class Datei.
Note: TextFileIndexer.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Code:
markus@java-test:~/build/lucene-test$ ls -l
insgesamt 24
drwxrwx--- 2 markus markus 4096 28. Apr 12:49 Java.jar
-rwxr--r-x 1 markus markus  668 28. Apr 14:28 lucene_testbuild.sh
-rw-r--r-- 1 markus markus 6697 28. Apr 14:29 TextFileIndexer.class
-rw-r--r-- 1 markus markus 6937 28. Apr 14:04 TextFileIndexer.java

Beim Ausführen fehlt aber wieder irgendwas.

Code:
markus@java-test:~/build/lucene-test$ java TextFileIndexer.class 
Exception in thread "main" java.lang.NoClassDefFoundError: TextFileIndexer/class
Caused by: java.lang.ClassNotFoundException: TextFileIndexer.class
	at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
	at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: TextFileIndexer.class. Program will exit.

Nun bin ich mit meinem Latein am Ende.
 
Einfach das ".class" weglassen. Der Java-Interpreter denkt, du möchtest die Klasse "class" im Package "TextFileIndexer" aufrufen, was natürlich Blödsinn ist.
In solchen Fällen hilft es, auf jedes Detail in der Fehlermeldung zu achten (hier: "TextFileIndexer -> / <- class").

Kann aber sein, dass du zum Starten auch den Classpath angeben musst.

Mal so prinzipiell: Dass du das auf Kommandozeile machst, finde ich persönlich gut, denn damit versteht man wirklich die Funktionalität dahinter und wie die Sachen aufgebaut sind.
Sobald du die Phase aber hinter dir gelassen hast, solltest du Tools nicht als Fehlerquelle, sondern als Arbeitserleichterung sehen.
Ich weiß auch nicht, welches Ziel du verfolgst, aber eventuell fährst du auch mit Solr (Servlet mit integrierter Lucene-Engine) auf Tomcat o.ä. besser als mit der Low-Level-Lösung.
 
Zuletzt bearbeitet:
Einfach das ".class" weglassen. Der Java-Interpreter denkt, du möchtest die Klasse "class" im Package "TextFileIndexer" aufrufen, was natürlich Blödsinn ist.

Danke, Fehler korrigiert. Dummerweise hats nichts gebracht.

markus@java-test:~/build/lucene-test$ java TextFileIndexer
Exception in thread "main" java.lang.NoClassDefFoundError: TextFileIndexer
Caused by: java.lang.ClassNotFoundException: TextFileIndexer
at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:334)
Could not find the main class: TextFileIndexer. Program will exit.

Ich hab mir entweder irgendeinen saudämlichen Fehler angewöhnt, komme aber nicht dahinter worin der besteht - oder aber alle Anleitungen die ich bisher gelesen habe sind Schrott. Zu Lucene 3.5 habe ich ebenfalls etwas gefunden - hat aber nichts gebracht. Es scheitert immer wieder daran das er die Klasse mit der er einsteigen soll nicht findet.

Kann aber sein, dass du zum Starten auch den Classpath angeben musst.

Denn zu den einzelnen Jar-Dateien?

Mal so prinzipiell: Dass du das auf Kommandozeile machst, finde ich persönlich gut, denn damit versteht man wirklich die Funktionalität dahinter und wie die Sachen aufgebaut sind.
Sobald du die Phase aber hinter dir gelassen hast, solltest du Tools nicht als Fehlerquelle, sondern als Arbeitserleichterung sehen.

Aber ja, genau so wars gedacht. Wie bei einer Gleichung - zuerst die Anzahl der Unbekannten so weit wie möglich reduzieren.

Ich weiß auch nicht, welches Ziel du verfolgst, aber eventuell fährst du auch mit Solr (Servlet mit integrierter Lucene-Engine) auf Tomcat o.ä. besser als mit der Low-Level-Lösung.

Ziel ist eine Standalone Anwendung. Da ich mit Servlet und Tomcat bisher nichts am Hut hatte und dabei auch noch auf Security achten müsste habe ich das erstmal beiseite gelegt.
 
Hmm also all zu schwer kann es ab hier nicht sein.
Ich glaube, unter Linux ist "." (also das aktuelle Verzeichnis) nicht im Classpath, deshalb findet er die Klasse vermutlich nicht, obwohl sie im selben Verzeichnis liegt.

Und ja, den Classpath mit allen Jars wirst du vermutlich noch zusammenbauen müssen.

Einfach mal ein wenig mit dem -cp Parameter spielen, irgendwie geht das.
 
Mir ist schon ganz schwindlig vom vielen spielen..klappt alles nicht.

Verständnisfrage: Daran das ich eine class Datei habe die jar einbinden will kann es nicht liegen? Hab noch nie eine jar erzeugt, brauche ich dazu mehr als "manifest"?

Wenn ich hier nicht weiter komme muss ich wohl drei Schritte zurück treten und erstmal das einbinden von jar dateien in eigene Programme üben.
 
Hmm also zunächst: "java -cp . TextFileIndexer" wäre schon ein Versuch, den du noch machen solltest.

Dann aber mal die Basics:
Eine Jar-Datei besteht aus gezippten Class-Dateien und eben einem Manifest.
Das elegante an einer Jar-Datei: Abhängigkeiten können direkt im Manifest angegeben werden, dadurch entfallen oft Handstände mit dem Classpath.
Und: Für alle Classes in einer Jar-Datei muss trotzdem nur die Jar-Datei im Classpath angegeben werden.

Einzelne Classes im Filesystem dagegen haben das nicht. Hier muss sozusagen ein Basis-Verzeichnis angegeben werden, unter dem die Classes gesucht werden sollen. Abhängigkeiten (gerne auch Jar-Files) müssen im Classpath ergänzt werden. Oder andersrum: Man kann das beliebig organisieren, aber alles was nicht im Classpath definiert ist, "sieht" Java nicht und stellt sich blöde.

Zu erwähnen sind aber noch Packages: Oft legt man die Classes ja unter bestimmten Packages ab. Für dein Beispiel könnte z.B. im TextFileIndexer definiert sein:
Code:
package com.p3d.lucenedemo;
Die Demo willst du unter deinem Home laufen lassen. Dadurch muss das Class-File dort abgelegt werden:
Code:
/home/markus/com/p3d/lucenedemo/TextFileIndexer.class
Und ausgeführt muss es so werden:
Code:
cd /home/markus
java -cp . com.p3d.lucenedemo.TextFileIndexer
Da bei dir anscheinend kein Package definiert ist, entfallen die Zwischenverzeichnisse entsprechend. Und wie gesagt: Jar-Dateien müssen eventuell noch in den Classpath dazu (unter Linux mit ":" getrennt, unter Windows mit ";"):
Code:
java -cp .:/irgendein/jar.jar com.p3d.lucenedemo.TextFileIndexer

edit: Am Anfang sieht das immer "wackelig" und fehleranfällig aus, aber eigentlich ist das recht logisch aufgebaut. Und wenn man das mal verinnerlicht hat, funktioniert das auch zuverlässig.

Da du gerade mit dem Gedanken spielst, selbst ein Jar zu bauen:
Guter Ansatz :) Aber das willst du definitiv nicht von Hand machen. Nimm dazu Ant - oder arbeite dich doch mal in Maven ein.
Du kannst dir ja mal andere Jars anschauen, dann siehst du, was so ungefähr das Ergebnis sein muss (einfach entzippen oder so).

edit 2: Das irgendwelche Imports nicht gefunden, da dein Classpath unvollständig ist, blüht dir wahrscheinlich schon noch. Dann sieht aber die Fehlermeldung auch anders aus. Momentan "sieht" er deine TextFileIndexer-Klasse nicht. Wenn ihm Lucene-Klassen fehlen, dann sagt er das auch.
 
Zuletzt bearbeitet:
Geht!

Kaum zu glauben was vier Stunden Schlaf alles bewirken können. Ich hab den ganzen Krempel nochmal in ein eigenes Verzeichnis kopiert und den Source eingeschränkt bis nur noch die Textausgabe von main übrig war. Danach ist mir aufgefallen das er zwar unten noch TestFileIndexer anmeckert, oben aber die fehlende Analyser Klasse.

Also alles nochmal aufgebaut, dabei darüber gestolpert das er beim Import ja die von Dir angesprochenen unterverzeichnisse erwartet. Brute Force:

cp=".:lucene/lucene-core-4.2.1.jar" ; for i in `find . -name *.jar` ; do cp=$cp:"./"$i ; done ; javac TextFileIndexer.java -classpath $cp

und das gleiche beim ausführen. Danach hat er brav sein Sprüchlein aufgesagt und nun er bereits fleißig am Probe-Indexieren meiner Ebooks. Letztlich war es also wie vermutet 'Fehler 50'.

DANKE! Fettes, dickes, verplichtendes DANKE!
 
Zurück
Oben Unten