【问题标题】:Error package does not exist in Intellij but working in Spring Tool Suite STSIntellij 中不存在错误包,但在 Spring Tool Suite STS 中工作
【发布时间】:2014-04-30 18:58:54
【问题描述】:

好吧,这快把我逼疯了……我正在处理一个 Maven 项目,并且我有 3rd Party JAR 依赖项,这些依赖项会导致我在 IntelliJ 上出现编译错误,但在 STS 中却没有。

我的简化项目结构是这样的:

FERPAPortlet
-src
--main
---java
----edu.sandiego.parent
-----FERPAPortlet
---resources
---webapp
----META-INF
----WEB-INF
-----jsp
-----lib <----- 3rd Party JARS are here
-----liferay-display.xml
-----liferay-plugin-package.xml
-----liferay-portlet.xml
-----portlet.xml
-----web.xml
--test
-pom.xml

在 SpringSource Tool Suite 中,如果我运行 compile/package,一切运行正常!事实上,如果我先在 STS 中运行它,然后用 IntelliJ 重新打开,问题就解决了。尽管如此,我更喜欢 IntelliJ 而不是 STS...

当我运行 maven compile 时,我得到的示例错误是这样的:

[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] C:\Users\rico.r-10\Documents\GitHub\github.sandiego.edu\FERPAPortlet\src\main\java\edu\sandiego\parent\FERPAPortlet.java:[3,35] error: package com.sghe.luminis.core.spring does not exist

但是,当我导航到该行时,IntelliJ 不会将其突出显示为红色作为错误,我实际上可以 Ctrl+单击,IntelliJ 将导航到库。

我已经通过 项目结构 > 项目设置 > 模块 > MyModule > 依赖项选项卡。

我在 IntelliJ 中缺少的 STS 正在做什么?

编辑:得到它的工作!这就是我所做的。 我用 3rd Party Jars 删除了 lib 文件夹。 然后我通过命令行手动添加了这些 Jar 文件,如下所示:

mvn install:install-file "-Dfile=C:\luminis5libs\luminis-dal.jar" "-DgroupId=com.sghe.luminis" "-DartifactId=luminis-dal" "-Dversion=1.6.0" "-Dpackaging=jar"

最后,我修改了 POM 以包含这些依赖项,如下所示:

<dependency>
            <groupId>com.sghe.luminis</groupId>
            <artifactId>luminis-dal</artifactId>
            <version>1.6.0</version>
        </dependency>

【问题讨论】:

  • 你不应该有一个 lib 目录。使用 maven,所有的 jars 都来自本地存储库,并被复制到目标(构建)目录下的 lib 目录中。检查您的 maven 依赖项,并删除 lib 及其下的所有内容。您的错误是因为 intellij 没有在您定义的路径中看到 jars。 STS 基于 eclipse,它可以让你摆脱任何你想要的粗制滥造的旧流程——Intellij 更专业,在 maven 项目上,需要可移植的项目。
  • @EngineerDollery,谢谢!我会试一试。我过度提供了您的帮助,但您能否指出定义良好流程的文档或链接?我将不得不与我的同事争论最佳实践...
  • 在这种情况下,我提到的做法是提供您的 jars/wars 依赖项的完整列表,以便部署您的应用程序的人可以决定如何满足这些依赖项。例如,如果您的 web-inf/lib 目录中的一个库很大,并且您的客户想要部署许多使用它的 Web 应用程序,他们可能会选择让 Web 容器提供该库,这样就只有一份。如果他们不知道您正在使用它,那么他们就无法提供它。更糟糕的是,如果他们不知道您正在使用它,并且他们提供自己的,略有不同
  • [cont] 版本略有不同,那么您的应用程序中可能会出现细微的错误。
  • 此外,我们倾向于拥有一套网络应用程序,而不仅仅是一个,而且它们都倾向于依赖相同的库。如果这些都在主 pom 中引用,那么更新所有 web 应用程序以同时使用新版本的库相对简单。有时,这是非常理想的,有时不太理想,但 Maven 为我们提供了选择。在项目中嵌入库严重限制了我们这样做的能力。它甚至限制了我们知道 Web 应用甚至使用特定版本的库的能力。

标签: maven intellij-idea compilation portlet sts-springsourcetoolsuite


【解决方案1】:

你不应该有一个 lib 目录。使用 maven,所有的 jars 都来自您的本地存储库,并被复制到目标(构建)目录下的 lib 目录中。检查您的 maven 依赖项,并删除 lib 及其下的所有内容。您的错误是因为 intellij 没有在您定义的路径中看到 jars。

【讨论】:

    【解决方案2】:

    点击intellij右边框的Maven Projects,点击“Reimport all Maven projects”后(蓝色圆形箭头)

    【讨论】:

      猜你喜欢
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多