2013-06-22 24 views
20

Mam (na pozór) prosty problem z maven, którego nie mogę rozwiązać. W moim POM mam określony zależnością do openrdf-sezam takiego:Kompilacja Mavena: pakiet nie istnieje

<dependency> 
    <groupId>org.openrdf.sesame</groupId> 
    <artifactId>sesame-runtime</artifactId> 
    <version>2.7.2</version> 
</dependency> 

Uruchomienie projektu z Eclipse działa dobrze, mogę nawet eksportować runnable plik jar. Niestety, nie mogę sprawić, żeby działał poprawnie za pośrednictwem programu cmd-line maven. Aby zbudować słoik, dodałem następujące do mojego pom:

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <configuration> 
       <descriptorRefs> 
        <descriptorRef>jar-with-dependencies</descriptorRef> 
       </descriptorRefs> 
       <archive> 
        <manifest> 
         <mainClass>foo.bar.Cli</mainClass> 
        </manifest> 
       </archive> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Kompilacja nie powiedzie się z następujących błędów:

.../PLDReducer.java:[25,29] package org.openrdf.rio.rdfxml does not exist 
.../PLDReducer.java:[27,33] package org.openrdf.sail.nativerdf does not exist 
.../LowPLDReducer.java:[25,29] package org.openrdf.rio.rdfxml does not exist 
.../Cli.java:[23,33] package org.openrdf.sail.nativerdf does not exist 
.../SchemaBuilder.java:[30,33] package org.openrdf.sail.nativerdf does not exist 
.../RepoQuerier.java:[23,33] package org.openrdf.sail.nativerdf does not exist 
.../PLDReducer.java:[78,44] cannot find symbol 

dziwne, jak tylko dodać plugin kompilacji do pom i zaktualizuj ustawienia projektu, Eclipse nie może już więcej się kompilować. Sprawdziłem moje repozytorium i tam są wszystkie pliki sezamowe.

mvn version daje to wyjście:

Apache Maven 2.2.1 (rdebian-8) 
Java version: 1.6.0_27 
Java home: /usr/lib/jvm/java-6-openjdk-amd64/jre 
Default locale: en_US, platform encoding: UTF-8 
OS name: "linux" version: "3.8.0-25-generic" arch: "amd64" Family: "unix" 

widzę, że wydaje się wskazywać na JRE, ale mój googling wykazało, że chciałbym zobaczyć inny błąd, jeśli sam kompilator nie został znaleziony. Mam pasted the complete POM here, jeśli jest potrzebna.

Czy jest coś, czego mi brakuje? Nie mogę znaleźć żadnych błędów w POM.

+0

Czy możesz pokazać pełną wydajność "pakietu czystego mvn"? – khmarbaise

+0

[Tutaj jest przełącznik -e] (http://pastebin.com/zg24L8rS) i [tutaj z przełącznikiem -X] (http://pastebin.com/A5G613LL) – feob

+0

Wygląda na to, że używasz nazw pakietów (presumbly w twojej imporcie), które nie istnieją. Czy naprawdę potrzebujesz pakietów Thoose? Korzystasz z klas z niego? Czyszczenie części importowej za pomocą IDE (jak Eclipse?)? Czy możesz pokazać jeden z plików kodu źródłowego, takich jak 'PLDReducer.java'? – khmarbaise

Odpowiedz

7

Trzeba dodać następującą zależność na swojej budowie:

<dependency> 
    <groupId>org.openrdf.sesame</groupId> 
    <artifactId>sesame-rio-api</artifactId> 
    <version>2.7.2</version> 
</dependency> 

Ponadto proponuję wziąć głęboki spojrzenie w documentation about how to use the lib.

+0

Dzięki, to naprawdę załatwiło sprawę! Ale jeśli ten dodatkowy moduł jest wymagany, jak to możliwe, że projekt kompiluje się i uruchamia z poziomu zaćmienia? Nie mam żadnych słoików w folderze lib lub podobnym. Również połączony dokument wydaje się świetny, jeszcze się z tym nie zetknąłem! – feob

+11

Brakujące pakiety są zależne od czasu wykonywania, dlatego kompilacja z wiersza poleceń kończy się niepowodzeniem. Jednak plugin Maven Eclipse zazwyczaj ignoruje reguły scoping i po prostu wyciąga każdą zależność, dlatego kompilacja z Eclipse będzie działać bez problemów. –

+0

Jaki zakres zdefiniowałeś? – khmarbaise

0

nie wiem, czy nie było korupcji plik czy co, ale po potwierdzając poprawną konfigurację pom, udało mi się rozwiązać ten problem, usuwając słoik z mojego lokalnego repozytorium m2, zmuszając Mavena do pobrania go ponownie, gdy przeprowadzałem testy.

3

Nie zawierają znacznika <scope> w zależności. Jeśli go dodać, swoją zależność staje się czymś w rodzaju:

<dependency> 
    <groupId>org.openrdf.sesame</groupId> 
    <artifactId>sesame-runtime</artifactId> 
    <version>2.7.2</version> 
    <scope> ... </scope> 
</dependency> 

The „Zakres” tag mówi Maven, na którym etapie kompilacji jest potrzebne swoją zależność. Przykłady wartości do wprowadzenia to "test", "zapewnione" lub "środowisko uruchomieniowe" (pomiń cytaty w twoim pom). Nie znam Twojej zależności, więc nie mogę powiedzieć, jaką wartość wybrać. Zapoznaj się z dokumentacją Maven i dokumentacją zależności.

+0

po prostu miał ten sam problem i usunąłem wszystkie razem i pomyślnie zbudowałem projekt. –

Powiązane problemy