如何强制 IntelliJ 中的 Maven 从本地 .m2 存储库中提取特定依赖项
How to force Maven in IntelliJ to pull specific dependency from local .m2 repository
简介
在我继承的一个特定项目中,我们有一个 jar
文件的依赖项,它是 simple-capcha
的自定义 wrapper/servlet。
他们告诉我对小型包装验证码项目进行特定更改,并生成 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 从本地 .m2
存储库替换项目中的 maven:library
。
最后,特定的 JAR 包含一个 HTTPServlet
,它实际上在主项目的 web.xml
中使用。在某些时候,当我更改依赖版本时,我在 JBOSS
部署 war
:
之后得到 classNotFoundException
<servlet>
<servlet-name>TheCaptcha</servlet-name>
<servlet-class><servlet>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>test.company.something.CaptchaServerServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>60</param-value>
</init-param>
</servlet>
问题
开发和测试 was/is 通常作为依赖项包含的依赖项的最佳方法是什么?我可以删除 pom.xml 条目,并将其他项目作为模块包含在内吗?
我正在使用 intelliJ IDEA 2016。
最后,有没有办法把两个modules/projects连在一起?
我怀疑应该有。
将我的评论移至此处的扩展答案。
首先,拥有多个不同版本的 any 发布了具有 相同 版本号的 maven 工件会带来很多问题!!如果可能,请避免这样做。编号系统始终可以扩展(例如 0.90.1
或 0.90-CUSTOM-1
或 0.09-A
)。
其次,使用 systemPath
作为依赖是 non-standard。尝试使用版本 "normally",以便在本地工作时它们存在于您的 M2_HOME\.m2\repository
中(并且可以上传到您的 artifactory 或 nexus 以与同事共享)。
现在,就构建/测试过程的自动化而言,您有几个选择。您可以构建 0.90.1
和 0.90.2
并在每次重建依赖项时更新 <dependency>
部分的版本。
或者您可以使用快照版本控制。 0.90.1-SNAPSHOT
向 Maven 表明这是一个快照构建。每当您重建具有快照依赖项的项目时,它都会查看该依赖项是否已更改。
最后,您可以将依赖项作为子模块移动到与主项目相同的项目中。这样您就可以避免在项目之间定义明确的依赖关系。
希望这对您有所帮助...
简介
在我继承的一个特定项目中,我们有一个 jar
文件的依赖项,它是 simple-capcha
的自定义 wrapper/servlet。
他们告诉我对小型包装验证码项目进行特定更改,并生成 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 从本地 .m2
存储库替换项目中的 maven:library
。
最后,特定的 JAR 包含一个 HTTPServlet
,它实际上在主项目的 web.xml
中使用。在某些时候,当我更改依赖版本时,我在 JBOSS
部署 war
:
classNotFoundException
<servlet>
<servlet-name>TheCaptcha</servlet-name>
<servlet-class><servlet>
<servlet-name>StickyCaptcha</servlet-name>
<servlet-class>test.company.something.CaptchaServerServlet</servlet-class>
<init-param>
<param-name>width</param-name>
<param-value>250</param-value>
</init-param>
<init-param>
<param-name>height</param-name>
<param-value>60</param-value>
</init-param>
</servlet>
问题
开发和测试 was/is 通常作为依赖项包含的依赖项的最佳方法是什么?我可以删除 pom.xml 条目,并将其他项目作为模块包含在内吗?
我正在使用 intelliJ IDEA 2016。
最后,有没有办法把两个modules/projects连在一起? 我怀疑应该有。
将我的评论移至此处的扩展答案。
首先,拥有多个不同版本的 any 发布了具有 相同 版本号的 maven 工件会带来很多问题!!如果可能,请避免这样做。编号系统始终可以扩展(例如 0.90.1
或 0.90-CUSTOM-1
或 0.09-A
)。
其次,使用 systemPath
作为依赖是 non-standard。尝试使用版本 "normally",以便在本地工作时它们存在于您的 M2_HOME\.m2\repository
中(并且可以上传到您的 artifactory 或 nexus 以与同事共享)。
现在,就构建/测试过程的自动化而言,您有几个选择。您可以构建 0.90.1
和 0.90.2
并在每次重建依赖项时更新 <dependency>
部分的版本。
或者您可以使用快照版本控制。 0.90.1-SNAPSHOT
向 Maven 表明这是一个快照构建。每当您重建具有快照依赖项的项目时,它都会查看该依赖项是否已更改。
最后,您可以将依赖项作为子模块移动到与主项目相同的项目中。这样您就可以避免在项目之间定义明确的依赖关系。
希望这对您有所帮助...