Java 如何从插件类路径(jetty:run)中删除maven库(jsr250-api-1.0.jar)?

Java 如何从插件类路径(jetty:run)中删除maven库(jsr250-api-1.0.jar)?,java,maven,maven-jetty-plugin,Java,Maven,Maven Jetty Plugin,我正在将我们的项目从Java8迁移到Java11 作为第一步,我将使用源代码和目标代码兼容性1.8编译它,但尝试在openjdk-11上运行该应用程序 在开发过程中,我们使用jetty:run目标来启动应用服务器。此目标因以下错误而失败: Caused by: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String; at org.springframework.context.an

我正在将我们的项目从Java8迁移到Java11

作为第一步,我将使用源代码和目标代码兼容性1.8编译它,但尝试在openjdk-11上运行该应用程序

在开发过程中,我们使用jetty:run目标来启动应用服务器。此目标因以下错误而失败:

Caused by: java.lang.NoSuchMethodError: javax.annotation.Resource.lookup()Ljava/lang/String;
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.<init>(CommonAnnotationBeanPostProcessor.java:621) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.lambda$buildResourceMetadata$0(CommonAnnotationBeanPostProcessor.java:383) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.util.ReflectionUtils.doWithLocalFields(ReflectionUtils.java:713) ~[spring-core-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.buildResourceMetadata(CommonAnnotationBeanPostProcessor.java:365) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.findResourceMetadata(CommonAnnotationBeanPostProcessor.java:350) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessMergedBeanDefinition(CommonAnnotationBeanPostProcessor.java:298) ~[spring-context-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyMergedBeanDefinitionPostProcessors(AbstractAutowireCapableBeanFactory.java:1043) ~[spring-beans-5.1.0.RELEASE.jar:5.1.0.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:550) ~[spring-beans-5.1.0.RELEASE.jar:5.1.0.RELEASE]
... 63 more
似乎maven正在将其/lib/文件夹中的所有lib放在插件类路径上

我想,当我在JDK1.8上运行它时,来自jdk的
@Resource
注释具有优先权(正如我以前看到过这个错误),但情况不再如此(因为这个注释不再包含在jdk11中)

我有什么办法摆脱这个旧班级

(我可以从maven安装中升级lib,但我更愿意将其作为最后手段,这将要求项目中的每个人都调整其maven安装)

编辑:jetty:runforked目标也很好,但是有了这个目标,我不能保留插件的
配置部分

这似乎确实是一个maven类路径隔离问题。

关于和,我们可以通过在
pom.xml
中定义
扩展名来覆盖
${maven.home}/lib
,如下所示:-

[DEBUG] javax.annotation:javax.annotation-api:jar:1.3.2:
[DEBUG]    org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[DEBUG] Created new class realm extension>
        javax.annotation:javax.annotation-api:1.3.2
[DEBUG] Importing foreign packages into class realm extension>
        javax.annotation:javax.annotation-api:1.3.2
[DEBUG]   Imported:  < maven.api
[DEBUG] Populating class realm extension>
        javax.annotation:javax.annotation-api:1.3.2
[DEBUG]   Included: javax.annotation:javax.annotation-api:jar:1.3.2
[DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:1.1
[DEBUG] Dependency collection stats: {...}
[DEBUG] javax.annotation:jsr250-api:jar:1.0:
[DEBUG]    org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[DEBUG] Created new class realm extension>
        javax.annotation:jsr250-api:1.0
[DEBUG] Importing foreign packages into class realm extension>
        javax.annotation:jsr250-api:1.0
[DEBUG]   Imported:  < maven.api
[DEBUG] Populating class realm extension>
        javax.annotation:jsr250-api:1.0

....

[DEBUG] Extension realms for project some-group:some-artifact:some-packing:some-version : 
    [ClassRealm[extension>javax.annotation:javax.annotation-api:1.3.2, 
                parent: sun.misc.Launcher$AppClassLoader@5c647e05], 
     ClassRealm[extension>javax.annotation:jsr250-api:1.0, 
                parent: sun.misc.Launcher$AppClassLoader@5c647e05]]
[DEBUG] Created new class realm project>some-group:some-artifact:some-version
[DEBUG] Populating class realm project>some-group:some-artifact:some-version
[DEBUG]   Included: javax.annotation:javax.annotation-api:jar:1.3.2
[DEBUG] Looking up lifecycle mappings for packaging war from 
    ClassRealm[project>some-group:some-artifact:some-version,
              parent: ClassRealm[maven.api, parent: null]]  
pom.xml

javax.annotation
javax.annotation-api
1.3.2
javax.annotation
jsr250 api
1
当执行
mvn-e-X清洁测试时,它给出以下信息:-

[DEBUG] javax.annotation:javax.annotation-api:jar:1.3.2:
[DEBUG]    org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[DEBUG] Created new class realm extension>
        javax.annotation:javax.annotation-api:1.3.2
[DEBUG] Importing foreign packages into class realm extension>
        javax.annotation:javax.annotation-api:1.3.2
[DEBUG]   Imported:  < maven.api
[DEBUG] Populating class realm extension>
        javax.annotation:javax.annotation-api:1.3.2
[DEBUG]   Included: javax.annotation:javax.annotation-api:jar:1.3.2
[DEBUG]   Included: org.codehaus.plexus:plexus-utils:jar:1.1
[DEBUG] Dependency collection stats: {...}
[DEBUG] javax.annotation:jsr250-api:jar:1.0:
[DEBUG]    org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[DEBUG] Created new class realm extension>
        javax.annotation:jsr250-api:1.0
[DEBUG] Importing foreign packages into class realm extension>
        javax.annotation:jsr250-api:1.0
[DEBUG]   Imported:  < maven.api
[DEBUG] Populating class realm extension>
        javax.annotation:jsr250-api:1.0

....

[DEBUG] Extension realms for project some-group:some-artifact:some-packing:some-version : 
    [ClassRealm[extension>javax.annotation:javax.annotation-api:1.3.2, 
                parent: sun.misc.Launcher$AppClassLoader@5c647e05], 
     ClassRealm[extension>javax.annotation:jsr250-api:1.0, 
                parent: sun.misc.Launcher$AppClassLoader@5c647e05]]
[DEBUG] Created new class realm project>some-group:some-artifact:some-version
[DEBUG] Populating class realm project>some-group:some-artifact:some-version
[DEBUG]   Included: javax.annotation:javax.annotation-api:jar:1.3.2
[DEBUG] Looking up lifecycle mappings for packaging war from 
    ClassRealm[project>some-group:some-artifact:some-version,
              parent: ClassRealm[maven.api, parent: null]]  
[DEBUG]javax.annotation:javax.annotation api:jar:1.3.2:
[DEBUG]org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[调试]创建了新的类领域扩展>
注释:javax.annotation api:1.3.2
[调试]将外部包导入类领域扩展>
注释:javax.annotation api:1.3.2
[调试]已导入:
注释:javax.annotation api:1.3.2
[DEBUG]包括:javax.annotation:javax.annotation api:jar:1.3.2
[调试]包括:org.codehaus.plexus:plexus-utils:jar:1.1
[调试]依赖项集合统计信息:{…}
[DEBUG]javax.annotation:jsr250 api:jar:1.0:
[DEBUG]org.codehaus.plexus:plexus-utils:jar:1.1:runtime
[调试]创建了新的类领域扩展>
注释:JSR250API:1.0
[调试]将外部包导入类领域扩展>
注释:JSR250API:1.0
[调试]已导入:
注释:JSR250API:1.0
....
[调试]项目的扩展领域某些组:某些工件:某些打包:某些版本:
[ClassRealm[extension>javax.annotation:javax.annotation api:1.3.2,
父项:sun.misc.Launcher$AppClassLoader@5c647e05], 
ClassRealm[extension>javax.annotation:jsr250 api:1.0,
父项:sun.misc.Launcher$AppClassLoader@5c647e05]]
[调试]创建了新的类领域项目>某些组:某些工件:某些版本
[调试]填充类领域项目>某些组:某些工件:某些版本
[DEBUG]包括:javax.annotation:javax.annotation api:jar:1.3.2
[调试]从查找打包war的生命周期映射
ClassRealm[project>somegroup:someartifact:someversion,
父级:ClassRealm[maven.api,父级:null]]

我无法摆脱
javax.annotation:jsr250 api:1.0
,然后我将它放在
javax.annotation:javax.annotation api:1.3.2
之后,这样它将远离类路径,并确保首先使用
javax.annotation:javax.annotation api:1.3.2
。我想我们需要保持这一点,因为maven不会升级到commons annotation 1.1。在extensions部分,我只想添加一条注释,说明为什么需要这样做以及何时删除它。