Intellij maven依赖更喜欢本地代码

时间:2014-05-07 16:42:37

标签: maven pom.xml intellij-13

我正在开发一个项目,其中我有一个Android应用程序项目,其中pom依赖于其他项目 像这样的东西:

<dependencies>
        <dependency>
            <groupId>some.project/groupId>
            <artifactId>some.artifact<artifactId>
            <version>1.0.0</version>
            <type>apklib</type>
        </dependency>
</dependencies>

开发时我总是希望Intellij使用我在项目中的some.project库中的本地源代码。
问题是它会从服务器中提取1.0.0并使用它。
我尝试使用LATEST作为版本,只要我的some.project库版本更新到服务器上的最新版本,这就可以正常工作。
因为我们有自动构建,会在更改时为some.project增加版本,我将有一个场景,其中我的源代码为1.0.0,但服务器有1.0.1,再次intellij将拉出服务器apklib

有任何建议如何实现这一目标?如果我可以使用开发配置文件以某种方式定义这个仅用于开发,并使用prod配置文件来使用确切的版本号(它应该)将是惊人的。

谢谢!

6 个答案:

答案 0 :(得分:6)

在Maven运行/调试配置下有一个checkbox“解析Workspace工件”,选择它然后它将按预期工作。

答案 1 :(得分:6)

您可以在IntelliJ中添加模块依赖项: 文件 - &gt;项目设置 - &gt;模块点击模块 - &gt;单击“依赖关系”选项卡,然后单击绿色&#39; +&#39;签名并选择&#3; 3。模块依赖性&#39; ..添加您想在本地依赖的模块,然后单击蓝色箭头将模块置于Maven依赖项之上。

答案 2 :(得分:0)

假设您将项目组织为一个多模块项目,并且您正在谈论对作为项目模块之一的库的依赖,那么您需要使用快照依赖项,您需要使用完整的maven发布过程。实际上,您依赖于给定库的预构建的静态版本,但是您需要IntelliJ来查看您编译的源和类,并且快照依赖项正是为此目的而使用。

答案 3 :(得分:0)

这适用于以下方式的Maven项目:

  • 将您要使用的依赖项添加到Maven Projects选项卡。
  • 导航至您要查找的班级的实施
  • 进入实施后,您可以导航回超级方法以进行声明。

那是Navigate -> Implementation(s)或ALT + COMMAND + B(在Mac地图上)。然后,Intellij将为您提供从依赖项列表中的JAR或附加的Maven项目中的源代码中反编译该类的选项。

例如,我在Rooskie Bank的项目bank中,我想在Account中查看bank-domain类的代码。我点击一个帐户对象声明,然后按ALT + COMMAND + B.从弹出菜单中,我从具有&#34;(Maven:com.rooskiebank.bank-domain.jar)&#34;的源列表中选择定义。在选择中。

IMO这是一种尴尬的做事方式。尽管我喜欢它,但我发现Intellij很难在具有多个内部库的企业级系统中使用,而且我仍然使用Eclipse。 Intellij可以更好地使用Git,非常适合独立的微服务。

我想Gradle以类似的方式工作。

答案 4 :(得分:0)

我们正在处理同样的问题...

  

“如果在IDE中打开了该Maven项目,并且版本与安装在本地Maven存储库中的版本相匹配,则IDEA应该将依赖项解析为模块依赖项类型(而不是本地jar Maven库)。”

https://intellij-support.jetbrains.com/hc/en-us/community/posts/206836605-Always-prefer-local-module-source-over-Maven-dependencies

我们的解决方案是在pom.xml中添加本地Maven配置文件并指定本地依赖版本。要使其正常运行,您必须turn on local profile

<profiles>
    <profile>
        <id>local</id>
        <properties>
            <dependency.version>x.x.x</dependency.version>
        </properties>
    </profile>
</profiles>

在更新本地依赖项时,您也必须注意更新此版本,但是目前这是我们找到的最佳解决方案,并且对我们有用。

答案 5 :(得分:0)

只是一个小提示,说明如何使用Gradle进行相同操作。假设您有两个具有 lib app 的工作区。 lib 已部署到某些Maven存储库,需要通过以下方式进行描述:

// build.gradle
group 'lib.group'
version 'lib.version'

// settings.gradle
rootProject.name = 'lib.name'

应用依赖项如下:

// build.gradle
compile "lib.group:lib.name:lib.version"

因此,应用模块使用 lib 作为Maven依赖项。现在,您可以使用“文件” |“导入” lib 源到 app 工作区中。新增|来自现有资源的模块。从Gradle工具窗口刷新项目后,您将在 app 工作区中获得两个模块 lib app 。但是,即使重新导入Gradle之后, lib 依赖关系仍将指向maven存储库,您可以在File |项目结构。

此处要做的技巧是,在Gradle工具窗口的 app 模块上,用鼠标右键单击,然后选择综合构建配置选项。然后,在弹出窗口中,只需选择本地 lib 模块,即可将其包含在 app 模块内部。现在,在为整个工作区重新导入Gradle deps之后,您将获得 lib 的maven依赖关系,替换为本地依赖关系。