当前位置: 首页 > 知识库问答 >
问题:

如何从注释处理器的环境中排除Maven依赖项?

仲孙英才
2023-03-14

我有使用maven-processor-plugin的代码,让Hibernate在Java项目的文件夹src/main/generate中生成一些类。我正在准备将项目迁移到Java 11,在开发环境和运行时环境中。

到目前为止,在Hibernate 4.3.10.Final和Java 8中一切正常。在安装JDK 11和使用Hibernate5.4.4.Final之后,我遇到了臭名昭著的<code>javax.annotation。生成的问题。

由于Hibernate 5.4.4.Final应该与Java 9兼容,我期望生成的文件切换到javax.annotation.processing.Generate。不幸的是,旧的限定名称是我仍然可以在导入部分中的这些文件中看到的名称。因此,编译生成的文件将失败。

这是我配置的:

  • maven-处理器-插件,带有

经过进一步调查,我发现org.hibernate:hibernateJPAModelgen:5.4.4.Final中的<code>Context

        TypeElement java8AndBelowGeneratedAnnotation =
                pe.getElementUtils().getTypeElement( "javax.annotation.Generated" );
        if ( java8AndBelowGeneratedAnnotation != null ) {
            generatedAnnotation = java8AndBelowGeneratedAnnotation;
        }
        else {
            // Using the new name for this annotation in Java 9 and above
            generatedAnnotation = pe.getElementUtils().getTypeElement( "javax.annotation.processing.Generated" );
        }

从本质上讲,Hibernate 注释处理器尝试通过尝试获取对 Java 8 javax.annotation.Generate 类型的引用,来确定在生成的文件中输出哪个正确的注释(javax.annotation.Generate 和 javax.annotation.processing.Generate)。 我想前提是这种类型在Java 9环境中不存在。

但不幸的是,javax.annotation:jsr250-api被org.bsc.maven:maven-processor-plugin间接地作为传递依赖项拉入我的项目的构建环境。

因此,我的问题是:如何从传递给 Hibernate 注释处理器的环境中排除该传递依赖项?

我还想知道这是否是我应该向Hibernate或maven处理器插件项目报告的问题。


共有1个答案

丌官运珧
2023-03-14

我所做的工作如下所示。

需要注意的是,在根插件(本例中为maven-processor-plugin)和要排除的依赖项(本例中为jsr250-api)之间需要有一个中间构件。

我之前的错误是我再次列出了maven-processor-plugin而不是maven-plugin-api,这当然没有意义。

    <pluginManagement>
        ...
        <plugin>
            <groupId>org.bsc.maven</groupId>
            <artifactId>maven-processor-plugin</artifactId>
            <version>${maven-processor-plugin-version}</version>
            <configuration>
                <releaseVersion>${maven.compiler.release}</releaseVersion>
            </configuration>
            <executions>
                <execution>
                    <id>process</id>
                    <goals>
                        <goal>process</goal>
                    </goals>
                    <phase>generate-sources</phase>
                    <configuration>
                        <outputDirectory>src/main/generated</outputDirectory>
                    </configuration>
                </execution>
            </executions>
            <dependencies>
                <dependency>
                    <groupId>org.apache.maven</groupId>
                    <artifactId>maven-plugin-api</artifactId>
                    <version>${maven-plugin-api-version}</version>
                    <exclusions>
                        <!-- 
                            Exclude this artifact because it defines 'javax.annotation.Generated', which makes the 
                            generated source code incompatible with Java 11.
                        -->
                        <exclusion>
                            <groupId>javax.annotation</groupId>
                            <artifactId>jsr250-api</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
        </plugin>
        ...
    </pluginManagement>
 类似资料:
  • 我正在使用gradle/querydsl和JPA 2.1。 我想使用APT(qenties)生成querydsl元数据。 为此,我使用了gradle apt插件和gradle 4.7 在我的项目中,我使用以下配置了compileJava选项:

  • 问题内容: 我认为许多专业人员不切换到注释驱动的依赖注入的主要原因是,它不支持在开发/测试/生产环境之间进行切换。在许多情况下,出于开发目的,您不仅可以使用不同的服务(及其连接),而且有时还需要模拟它们或创建Dummy实例。 昨天我想出了一种使用Spring注释的解决方案: …应该可以,但是不好。 对于您的解决方案或论点,我将非常感兴趣:为什么这不是一个真正的问题;-)欢迎Guice,Spring

  • 问题内容: 我有一个项目,该项目依赖于由供应商控制的工件。该工件包含一些我依赖的类,其中一些类较旧并且会引起问题。有没有办法让Maven自动扩展jar,删除类并将它们重新打包为依赖项?我会举一个例子。 所以- 我需要使用在项目网站,但我需要使用从神器。我无法修改Supplier:artifact或us:dependency。 有任何想法吗?! 问题答案: 从版本2.0.9开始,maven保留了类路

  • 我在我的项目中遇到了依赖关系冲突的问题。特别是,slf4j日志记录有两种实现:slf4j-简单和logback-经典,我得到了 在运行时。 logback-classic对我来说是必备的依赖项(因为dropwizard),但slf4j-simple不是真的,我想把它从我的uber项目中去掉。只是没那么容易。 我的“uber jar”依赖于“small jar”,而“small-jar”又依赖于“s

  • 依赖关系:树是: 有人能帮我解除对验证api: jar: 1.0.0. GA的依赖吗?它似乎在wc pom中作为传递依赖。谢谢

  • 问题内容: 我有一个项目,需要以下Maven jibx插件: 在jibx插件pom内部,有一个xpp3依赖关系,我想从我的项目构建过程中排除它(由于某种原因,我无法在私有存储库中拥有它)。 有没有一种方法可以配置我的pom.xml(而不是插件pom)来排除该依赖关系? 编辑:我试图从插件pom中删除xpp3依赖项,并且该项目可以成功构建,所以我知道依赖项不是强制性的。 问题答案: 这是一个示例,其