Java

JavaBeanExecutable HV000254 Java Enum에 대한 매개변수 메타데이터 누락 물어보다

기록만이살길 2022. 10. 29. 15:29
반응형

JavaBeanExecutable HV000254 Java Enum에 대한 매개변수 메타데이터 누락 물어보다

1. 질문(문제점):

스프링 부트 애플리케이션을 1.5에서 2.3.5로 업그레이드했습니다(스프링 부트 gradle 플러그인 사용). 스프링 부트 애플리케이션이 시작되면 다음 경고가 4번 나타납니다.

2020-11-05 13:29:19.432 WARN 3931 --- [nio-8080-exec-4] ohvipjavabean.JavaBeanExecutable : HV000254: FacetField(String, int, String, String, String, int, Class)에 대한 매개변수 메타데이터 누락 , 암시적 또는 합성 매개변수를 선언합니다. 여러 매개변수에 동일한 삭제가 있는 경우 메서드 매개변수에 대한 제네릭 유형 정보의 자동 확인이 잘못된 결과를 생성할 수 있습니다. 이 문제를 해결하려면 '-parameters' 플래그를 사용하여 코드를 컴파일하십시오.

내 FacetField 열거형은 다음과 같습니다.

public enum FacetField {

    CONST_1("KEY", "ESFIELD", "RESOURCEKEY"),
    CONST_2("KEY", "ESFIELD", "RESOURCEKEY"),
    CONST_3("KEY", "ESFIELD", ""),

    CONST_4("KEY", "ESFIELD", "ESMAXFIELD", "RESOURCEKEY", Hours.class),
    CONST_5("KEY", "ESFIELD", "RESOURCEKEY", Experience.class),
    CONST_6("KEY", "ESFIELD", "", Distance.class);

    private String key;
    private String esField;
    private String esMaxField;
    private String resourcekey;
    private Class<? extends RangeFacet> rangeFacet;

    FacetField(final String key, final String esField, final String resourcekey) {
        this.key = key;
        this.esField = esField;
        this.resourcekey = resourcekey;
        this.rangeFacet = null;
    }

    FacetField(final String key, final String esField, final String resourcekey, final Class<? extends RangeFacet> rangeFacet) {
        this.key = key;
        this.esField = esField;
        this.resourcekey = resourcekey;
        this.rangeFacet = rangeFacet;
    }

    FacetField(final String key, final String esMinField, final String esMaxField, final String resourcekey, final Class<? extends RangeFacet> rangeFacet) {
        this.key = key;
        this.esField = esMinField;
        this.esMaxField = esMaxField;
        this.resourcekey = resourcekey;
        this.rangeFacet = rangeFacet;
    }


    public String getKey() {
        return key;
    }

    public String getEsField(final FieldProperty fieldProperty) {
        return esField + fieldProperty.getEsFieldProperty();
    }

    public String getEsMinField() {
        return esField;
    }

    public String getEsMaxField() {
        return esMaxField;
    }

    public String getResourcekey() {
        return resourcekey;
    }

    public enum Distance implements RangeFacet {

        FROM_0_TO_5(0d, 5d, "5"),
        FROM_0_TO_10(0d, 10d, "10"),
        FROM_0_TO_20(0d, 20d, "20"),
        FROM_0_TO_30(0d, 30d, "30"),
        FROM_0_TO_50(0d, 50d, "50");

        private final Double min;
        private final Double max;
        private final String selectableDescription;

        Distance(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

    public enum Experience implements RangeFacet {

        TO_1(0d, 1d, "1"),
        FROM_1_TO_2(1d, 2d, "2"),
        FROM_2_TO_5(2d, 5d, "5"),
        FROM_5_TO_10(5d, 10d, "10"),
        FROM_10(10d, null, "10+");

        private final Double min;
        private final Double max;
        private final String selectableDescription;

        Experience(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

    public enum Hours implements RangeFacet {

        FROM_0_TO_8(0d, 8d, "8"),
        FROM_9_TO_16(9d, 16d, "16"),
        FROM_17_TO_24(17d, 24d, "24"),
        FROM_25_TO_32(25d, 32d, "32"),
        FROM_33_TO_36(33d, 36d, "36"),
        FROM_37(37d, null, "40");

        private final Double min;
        private final Double max;
        private final String selectableDescription;
        
        Hours(final Double min, final Double max, final String selectableDescription) {
            this.min = min;
            this.max = max;
            this.selectableDescription = selectableDescription;
        }

        @Override
        public Double getMin() {
            return this.min;
        }

        @Override
        public Double getMax() {
            return this.max;
        }

        @Override
        public String getSelectableDescription() {
            return this.selectableDescription;
        }
    }

}

이것과 관련된 것을 찾을 수 있는 유일한 것은 github의 이 graal 문제입니다. https://github.com/oracle/graal/issues/1941

누군가 설명할 수 있습니까?

2. 해결방안:

spring-boot-parent2.2.x 버전 maven-compiler-plugin까지 플래그를 설정하는 데 사용되었습니다 .

플래그를 직접 추가해야 합니다 maven-compiler-plugin.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <parameters>true</parameters>
            </configuration>
        </plugin>
    </plugins>
</build>
64699000
반응형