如何解决对于IntelliJ Builder中的任意软件包列表,选择一个依赖作为另一个依赖的先例
目标
在编辑代码时,我试图使我的maven项目使用IntelliJ
构建器,因为IDE提供了快速重建和热部署功能,可以加快我的工作。但是由于我的Maven项目的设置方式,我遇到了障碍。
约束
我必须使用maven来使用它。解决方案必须位于IntelliJ
请注意,创建IntelliJ
插件是一种选择。由于IntelliJ
构建配置的局限性,我意识到这可能是必要的。
问题
我的项目依赖于两个库SharedLibA
和SharedLibB
,它们都包含com.shared包。 SharedLibA
是一个新库,而sharedLibB
是旧的库。 SharedLibA
和SharedLibB
包含我的项目所需的其他软件包。项目也需要它们都拥有com.shared的软件包。但是SharedLibB
是旧的/旧的,因此我们始终希望Tomcat优先考虑SharedLibA
中com.shared中的类的实现,而不是SharedLibB
中这些类的实现。为了实现这一目标,我们制定了一个Maven目标,即在打包WAR时将com.shared包下的类从SharedLibA
提取到WEB-INF / classs。
当我尝试在IntelliJ
中构建项目时,它会选择com.shared。*中类的错误实现,并且会发出编译错误,尽管通过maven可以完美地进行编译。我坚持使用这个僵化的行家hackjob
,但是我仍然想找到一种方法,使IntelliJ
理解我希望SharedLibA's
com.shared。*类在编译中不使用{ {1}}。我无法从考虑中删除SharedLibB's
,因为我需要SharedLibB
中的其他类来编译我的项目。
所需的解决方案
我正在寻找某种逻辑,例如“当考虑com.shared。*类时,选择SharedLibB
”或“当类路径解析中发生任何程序包冲突时,请优先考虑SharedLibA
”,因为我很确定ShareLibA
在任何程序包冲突中都应优先处理。
谢谢
我希望能对此做充分的解释,在此先感谢所有鸣叫的人。
解决方法
IDE builds基于configured for the module的依赖项的类路径和构建路径。它还考虑了their order-将使用与给定类匹配的第一个依赖项。
对于基于Maven的项目,依赖项列表及其顺序IDE取自模块的Maven pom.xml文件。因此,您可以在pom.xml文件中设置顺序。
另一个提到的选项是exclude the library items。但是更好的解决方案是正确配置Maven构建。
,您应该尝试转到项目“ .IML”文件,然后在其中: 您可以创建或修改模块。
您可以在其中包含或排除库或定义其使用优先级 您可以使用此代码段来启发
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="8">
<component name="SharedB" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
...
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
...
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
...
</component>
</module>
如果您对此解决方案不满意,可以使用Intellij的模块设置
https://www.jetbrains.com/help/idea/library.html#excluded_lib_items
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。