Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在Maven和Eclipse中使用不同的依赖版本两次构建相同的源代码?_Java_Eclipse_Maven_M2eclipse - Fatal编程技术网

Java 如何在Maven和Eclipse中使用不同的依赖版本两次构建相同的源代码?

Java 如何在Maven和Eclipse中使用不同的依赖版本两次构建相同的源代码?,java,eclipse,maven,m2eclipse,Java,Eclipse,Maven,M2eclipse,我想构建两个不同版本的定制SonarQube(SQ)插件;一个用于SonarQube 6.7.x LTS版本,一个用于最新的7.6版本。目前,我有一个类似于以下内容的Maven结构: 母公司 通用:工具和插件版本都使用的通用代码,不使用SQAPI 工具:一些相关的命令行实用程序,不使用SQAPI plugin-6.7:SQ 6.7的插件代码 plugin-7.6:SQ 7.6的插件代码 dist:构建包含CLI实用程序、插件版本、依赖项许可证和源代码的发行版zip plugin-6.7和

我想构建两个不同版本的定制SonarQube(SQ)插件;一个用于SonarQube 6.7.x LTS版本,一个用于最新的7.6版本。目前,我有一个类似于以下内容的Maven结构:

  • 母公司
    • 通用:工具和插件版本都使用的通用代码,不使用SQAPI
    • 工具:一些相关的命令行实用程序,不使用SQAPI
    • plugin-6.7:SQ 6.7的插件代码
    • plugin-7.6:SQ 7.6的插件代码
    • dist:构建包含CLI实用程序、插件版本、依赖项许可证和源代码的发行版zip
plugin-6.7和7.6的大部分源代码和资源都是相同的;只有少数类是不同的。因此,我想将此通用代码移动到某个共享源文件夹/模块

尽管如此,我仍然希望编译这段通用代码两次,以验证代码是否针对两个SQ API版本编译。在Eclipse中,这应该显示为两个独立的源文件夹或项目,因此我可以轻松地验证公共代码没有使用6.7 API中尚未提供的任何SQ API,也没有使用7.6 API中已删除或弃用的任何API

我更愿意坚持在一个构建中构建两个插件版本,因此如果可能的话,我希望避免使用两个单独的配置文件

这有可能吗

我试过的 通过Maven,我找到了几种方法来实现这一点,但我无法使用这些方法中的任何一种来实现m2eclipse

方法1

创建一个新的通用模块插件,包含pom-6.7.xml和pom-7.6.xml。除了工件id或分类器之外,这两个pom本质上是相同的,并且依赖于不同的SQAPI版本。父项目将它们定义为两个单独的模块,使用

<module>plugin-common/pom-6.7.xml</module>
<module>plugin-common/pom-7.6.xml</module>
plugincommon/pom-6.7.xml
插件common/pom-7.6.xml
这种方法的问题是我无法将这些模块导入Eclipse,因为m2eclipse只支持pom.xml作为文件名

方法2

与上述类似,但对pom.xml文件使用单独的子目录,并使用
${project.basedir}/./src/main/java
指向公共源代码:

  • 通用插件
    • src/main/java
    • src/main/resources
    • pom.xml:6.7和7.6模块的父级
    • 6.7/pom.xml
    • 7.6/pom.xml
这种方法允许将两个插件公共版本导入Eclipse,但Eclipse抱怨“访问…/src/main/java项目基本目录之外的目录”。因此,它不会在两个插件公共项目中显示任何源代码

方法3

在plugin common中没有任何pom.xml文件,而是使用build helper maven plugin,使用
${project.basedir}/./plugin common/src/main/java
将公共代码作为源文件夹添加到plugin-6.7和plugin-7.6模块中


在Eclipse中,由于“Access…/src/main/java目录在project base目录之外”的警告,此操作再次失败。

我现在选择了以下方法,效果非常好

Maven结构:

  • 母公司
    • 通用:工具和插件版本都使用的通用代码,不使用SQAPI
    • 工具:一些相关的命令行实用程序,不使用SQAPI
    • 插件:SonarQube插件代码
    • dist:构建包含CLI实用程序、插件版本、依赖项许可证和源代码的发行版zip
插件模块包含3个基本包:

  • myproject.plugin.common:SQ 6.7和7.6实现之间共享的代码
  • myproject.plugin.sq67:SonarQube 6.7-7.5.x的特定代码
  • myproject.plugin.sq76:SonarQube 7.6的特定代码+
plugin/pom.xml使用SonarQube API依赖项和打包插件定义,类似于以下内容:


org.sonarsource.sonarqube
声纳插件api
${sonarqube.version}
假如

org.sonarsource.sonar-packaging-maven-plugin
声纳封装maven插件
1.16
真的
我的钥匙
myproject.plugin.common.MyPlugin
插件名称
描述
真的
6.7
这允许插件使用SonarQube 6.7+,即使API依赖版本设置为7.6(参见下面的配置文件)。MyPlugin类是一个通用类,它使用Java反射加载特定于6.7或7.6的实现,具体取决于插件运行的SonarQube版本

最后,父pom.xml定义了以下两个概要文件:


违约
真的
7.6
常见的
插件
工具
距离
检查SQ6.7兼容性
假的
6.7
常见的
插件
org.apache.maven.plugins
maven编译器插件
**/sq76/**
默认配置文件现在构建了一个与SonarQube 6.7及更高版本兼容的插件,如果在该平台上运行,则启用了7.6特定功能