微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

对于IntelliJ Builder中的任意软件包列表,选择一个依赖作为另一个依赖的先例

如何解决对于IntelliJ Builder中的任意软件包列表,选择一个依赖作为另一个依赖的先例

目标

在编辑代码时,我试图使我的maven项目使用IntelliJ构建器,因为IDE提供了快速重建和热部署功能,可以加快我的工作。但是由于我的Maven项目的设置方式,我遇到了障碍。

约束

我必须使用maven来使用它。解决方案必须位于IntelliJ

请注意,创建IntelliJ插件是一种选择。由于IntelliJ构建配置的局限性,我意识到这可能是必要的。

问题

我的项目依赖于两个库SharedLibASharedLibB,它们都包含com.shared包。 SharedLibA一个新库,而sharedLibB是旧的库。 SharedLibASharedLibB包含我的项目所需的其他软件包。项目也需要它们都拥有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 举报,一经查实,本站将立刻删除。