2013-06-22 66 views
20

我有一个(看似)简单的maven问题,我无法解决。在我的POM我指定的依赖于openrdf芝麻这样的:Maven编译:包不存在

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

运行Eclipse中的项目运作良好,我甚至可以导出一个可运行jar文件。 不幸的是,我不能通过cmd-line maven使它正常工作。 要建立一个罐子,我已经添加了以下到我的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> 

编译失败,出现以下错误:当我编译插件添加到POM

.../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 

奇怪的是,并更新项目设置,eclipse似乎不能编译。我检查了我的存储库,并且所有的芝麻文件都在那里。

MVN --version给出了这样的输出:

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" 

我看,它似乎指向一个JRE,但我的谷歌搜索表明,我会看到另一个错误,如果编译器本身没有被发现。 我有pasted the complete POM here,如果它有任何帮助。

有什么我失踪?我在我的POM中找不到任何错误。

+0

你可以显示'mvn clean package'的完整输出吗? – khmarbaise

+0

[这里有-e开关](http://pastebin.com/zg24L8rS)和 [这里带有-X开关](http://pastebin.com/A5G613LL) – feob

+0

看起来你正在使用包名(presumbly在你的导入部分)哪些不存在。你真的需要thoose包吗?使用它的类?用IDE清理导入部分(如Eclipse?)?你能展示一个像PLDReducer.java这样的源代码文件吗? – khmarbaise

回答

7

你有以下依赖添加到您的构建:

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

而且我建议采取深入探讨了documentation about how to use the lib.

+0

谢谢,这真的有窍门!但是如果需要这个额外的模块,那么这个项目怎么可能在eclipse中编译和运行呢?我没有在lib文件夹或类似的任何罐子。此外,链接的文件似乎很棒,我还没有遇到过这个呢! – feob

+11

缺少的包是运行时依赖项,这就是为什么从命令行编译失败的原因。然而,Maven Eclipse插件往往会忽略范围规则,只是拉取每个依赖关系,这就是为什么从Eclipse编译没有问题的原因。 –

+0

您定义了哪种范围? – khmarbaise

0

不知道是否有文件损坏或什么,但后确认正确的pom配置我能够通过从本地m2存储库中删除jar来解决此问题,当我运行测试时,强制Maven再次下载它。

3

您的依赖项中不包含<scope>标记。如果添加它,你的依赖性变得像:

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

的“范围”标记告诉在此构建的阶段,需要你的依赖行家。要放入的值的示例是“test”,“provided”或“runtime”(省略pom中的引号)。我不知道你的依赖,所以我不能告诉你选择什么样的价值。请查阅Maven文档和依赖文档。

+0

只是有同样的问题,我一起删除了,它成功地建立了项目。 –