【问题标题】:Maven compile: package does not existMaven编译:包不存在
【发布时间】:2013-06-19 11:59:47
【问题描述】:

我有一个(看似)简单的 maven 问题我无法解决。在我的 POM 中,我指定了对 openrdf-sesame 的依赖,如下所示:

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

从 Eclipse 运行项目效果很好,我什至可以导出一个可运行的 jar 文件。 不幸的是,我无法通过 cmd-line maven 让它正常工作。 为了构建一个 jar,我在我的 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>

编译失败并出现以下错误:

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

奇怪的是,一旦我将编译插件添加到 pom 并更新项目设置,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 中找不到任何错误。

【问题讨论】:

  • 你能显示'mvn clean package'的完整输出吗?
  • 看起来您正在使用不存在的包名称(可能在您的导入部分中)。你真的需要那些包吗?使用它的类?用 IDE 清理了导入部分(比如 Eclipse?)?你能展示一个像PLDReducer.java这样的源代码文件吗?
  • PLDReducer.java - 我肯定使用 openrdf 包,我很确定它们是正确的。我可以从 eclipse 编译和运行我的项目。

标签: java maven compiler-errors


【解决方案1】:

您必须将以下依赖项添加到您的构建中:

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

此外,我建议深入了解documentation about how to use the lib.

【讨论】:

  • 谢谢,这确实成功了!但是如果需要这个额外的模块,项目怎么可能在 eclipse 中编译和运行呢?我在 lib 文件夹或类似文件夹中没有任何罐子。另外,链接的文档看起来很棒,我还没有遇到过!
  • 缺少的包是运行时依赖,这就是命令行编译失败的原因。然而,Maven Eclipse 插件往往会忽略范围规则,而只是拉取每个依赖项,这就是为什么从 Eclipse 编译将毫无问题地工作的原因。
  • 你定义了哪种范围?
  • @khmarbaise - 您的答案中的链接已损坏 (openrdf.callimachus.net/sesame/2.7/docs/…) 如果可能,请您更新工作链接
【解决方案2】:

您的依赖项中没有包含&lt;scope&gt; 标记。如果你添加它,你的依赖会变成这样:

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

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

【讨论】:

  • 刚刚遇到了同样的问题,我把 一起删除了,它成功地构建了项目。
  • 对我来说,删除范围不起作用。我从命令行获取 org.apache.log4j 的相同包不存在错误 - mvn clean install。从 intellij 运行 testng.xml 时会工作
【解决方案3】:

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

【讨论】:

    【解决方案4】:

    这个问题发生在我身上,我通过仅删除范围标记来解决并成功构建。

    【讨论】:

      猜你喜欢
      • 2017-08-30
      • 2019-01-21
      • 2014-01-29
      • 2013-12-19
      • 2013-05-31
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 2019-08-09
      相关资源
      最近更新 更多