如何在IntelliJ中强制Maven从本地.m2存储库中提取特定依赖项

时间:2017-02-08 11:27:13

标签: java maven intellij-idea jar lib

简介

在我继承的特定项目中,我们有一个依赖项作为jar文件,它是simple-capcha的自定义包装器/ servlet。 他们告诉我对小包装器capcha项目进行特定更改,然后生成JAR - 然后在主项目中测试它。

然后我必须让第二个主要项目使用新的JAR作为依赖项(而不是位于公司工件上的文件)。

当前流程

下面我描述我正在使用的过程,我觉得效率非常低。 我使用maven从小项目中生成jar文件。 然后我转到本地.m2存储库并用新的存储库替换那里存在的JAR(从artifactory下载)。

<dependency>
            <groupId>test.company.something.captcha</groupId>
            <artifactId>captcha-common</artifactId>
            <version>0.90</version>
        <!--    <scope>system</scope>
            <systemPath>C:/Users/mbakopoulos/Dropbox/_captcha/target/captcha-common-0.90.jar</systemPath>-->
        </dependency>

最后,我取消注释,并评论<scope><systemPath>标记(启用了自动导入),以便intellij检测到2个更改,并强制maven从本地{{1}拉出} repository替换项目中的.m2

最后,特定JAR包含实际在主项目的maven:library中使用的HTTPServlet。在我更改依赖项版本的某个时刻,web.xml部署了classNotFoundException之后我得到JBOSS

war

问题

开发和测试通常作为依赖项包含的依赖项的最佳方法是什么?我可以摆脱pom.xml条目,并将其他项目作为模块包含在内吗?

我正在使用intelliJ IDEA 2016。

最后,无论如何都要连接到两个模块/项目吗? 我怀疑应该有。

1 个答案:

答案 0 :(得分:2)

在此处将我的评论转到一个扩展答案。

首先,有多个不同版本的任何发布的maven工件与相同的版本号,这就是要求很多问题!!如果可能的话,避免这样做。编号系统始终可以扩展(例如0.90.10.90-CUSTOM-10.09-A)。

其次,使用systemPath作为依赖是非标准的。尝试使用版本&#34;通常&#34;,以便他们在本地工作时居住在M2_HOME\.m2\repository(并且可以上传到您的神器或连接以与同事共享)。

现在,就自动化构建/测试过程而言,您有几个选择。您可以构建0.90.10.90.2,并在每次重建依赖项时更新<dependency>部分的版本。

或者您可以使用快照版本控制。 0.90.1-SNAPSHOT向maven表明它是一个快照构建。每当您使用快照依赖项重建项目时,它都会查看该依赖项是否已更改。

最后,您可以将依赖项作为子模块移动到与主项目相同的项目中。然后,您可以避免在项目之间定义显式依赖关系。

希望这会有所帮助......