Intellij maven依赖项更喜欢本地代码

Intellij maven依赖项更喜欢本地代码,maven,pom.xml,intellij-13,Maven,Pom.xml,Intellij 13,我正在做一个项目,在这个项目中,我有一个android应用程序项目,它与其他项目有pom依赖关系 大概是这样的: <dependencies> <dependency> <groupId>some.project/groupId> <artifactId>some.artifact<artifactId> <version>1.0.

我正在做一个项目,在这个项目中,我有一个android应用程序项目,它与其他项目有pom依赖关系 大概是这样的:

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

一些。项目/组ID>
一些手工艺品
1.0.0
apklib
在开发过程中,我始终希望Intellij使用项目中的some.project库中的本地源代码。
问题是,它将从服务器中提取1.0.0版并使用该版本。
我尝试使用最新的as版本,只要我的some.project库版本在服务器上更新为最新版本,这就可以正常工作。
由于我们有自动构建,在进行更改时会增加某些.project的版本,因此我将有一个场景,在这个场景中,我的消息来源说是1.0.0,但服务器有1.0.1,intellij将再次拉动服务器apklib

如何实现这一目标,有什么建议吗?如果我能用一个开发人员配置文件来定义这个,并且用一个prod配置文件来使用确切的版本号(它应该这样做),那将是令人惊讶的。


谢谢

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

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

您可以在IntelliJ中添加模块依赖项:
文件->项目设置->模块单击模块->单击依赖项选项卡,然后单击绿色“+”符号并选择“3”。模块依赖项“。。添加要在本地依赖的模块,然后单击蓝色箭头,将模块置于Maven依赖项之上。

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

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

// settings.gradle
rootProject.name = 'lib.name'
  • 将要使用的依赖项添加到Maven项目选项卡
  • 导航到要查找的类的实现
  • 一旦进入实现,就可以导航回声明的超级方法
这是
Navigate->Implementation
或ALT+COMMAND+B(在Mac地图上)。Intellij随后将向您提供从依赖项列表中的JAR或附加Maven项目中的源代码反编译类的选项

例如,我在Rooskie银行的project
bank
,我想查看
银行域中的
帐户
类的代码。我单击帐户对象声明并按ALT+COMMAND+B。从弹出菜单中,我从选项中没有的源列表中选择定义(Maven:com.rooskiebank.bank domain.jar)

在我看来,这是一种笨拙的做事方式。尽管我很喜欢Intellij,但我发现Intellij很难在具有多个内部库的企业级系统中使用,我仍然经常使用Eclipse。Intellij与Git配合使用效果更好,非常适合独立的微服务


我想Gradle也有类似的工作方式

我们正在处理同样的问题

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

我们的解决方案是在pom.xml中添加本地Maven概要文件并指定本地依赖版本。要让它工作,你必须


地方的
x、 x.x

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

只是一个小提示,如何对Gradle执行相同操作。假设您有两个具有libapp的工作区。lib被部署到一些maven回购协议中,需要以以下方式进行描述:

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

// settings.gradle
rootProject.name = 'lib.name'
app依赖项如下:

// build.gradle
compile "lib.group:lib.name:lib.version"
因此,app模块使用lib作为maven依赖项。现在,您可以使用现有源中的文件|新建|模块将lib源导入app工作区。从Gradle工具窗口刷新项目后,您将在app工作区中获得两个模块libapp。然而,即使在重新导入Gradle之后,lib依赖项仍将指向maven存储库,即您可以在文件|项目结构中检查的内容


这里要做的技巧是用鼠标右键单击Gradle工具窗口中的app模块,然后选择Composite Build Configuration选项。然后,在弹出窗口中,只需选择本地模块,将其包含在应用程序模块构建中。现在,在为整个工作区重新导入Gradle deps后,您将得到lib的maven依赖项替换为本地依赖项。

感谢您的回复,我们使用的是快照依赖项,因此依赖项实际上是1.0.0-snapshot。问题是,intellij将下载最新的快照库,而不是使用我的本地代码(所有模块都在我的项目中)。在没有任何评论的情况下被否决是非常烦人的,至少告诉我答案中有什么错误,downvoter。不是downvoter,但我认为这只是解决方案的一部分。我认为你还必须确保你在pom中使用了正确的版本。这对我很有用。但我认为resolve Workspace artifacts设置仅适用于t