Обновление Java с 5 до 8 с помощью Spring - PullRequest
0 голосов
/ 11 января 2019

Я работаю над устаревшим приложением, которое все еще работает на JDK5. Как часть нашего нового требования, нам нужно обновить его до JDK 8. Согласно моему пониманию, поскольку Java обратно совместима, это должно было сработать. Когда я скомпилировал с JDK 8, сборка прошла успешно. Но при запуске я получил следующую ошибку:

Ошибка создания компонента с именем AuthorisationDialogController в ресурс пути к классу [com / some / application / conf / dispense / dispense-controllers.xml]: ошибка установка значений свойств; вложенное исключение org.springframework.beans.PropertyAccessExceptionsException: PropertyAccessExceptionsException (1 ошибка); вложенными propertyAccessExceptions: [org.springframework.beans.TypeMismatchException: не удалось преобразовать значение свойства типа [com.some.application.dispense.context.DispenseContextImpl] для требуется тип [com.some.application.admin.AdminContext] для свойства 'Контекст']

Мои зависимости выглядят следующим образом:

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring</artifactId>
            <version>1.2.7</version>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>2.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymockclassextension</artifactId>
            <version>2.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.1_3</version>
        </dependency>
        <dependency>
            <groupId>com.micros</groupId>
            <artifactId>aaaa</artifactId>
            <version>${externalVendor}</version>
        </dependency>
        <dependency>
            <groupId>com.micros</groupId>
            <artifactId>bbb</artifactId>
            <version>${externalVendor}</version>
        </dependency>
        <dependency>
            <groupId>com.micros</groupId>
            <artifactId>ccc</artifactId>
            <version>${externalVendor}</version>
        </dependency>
        <dependency>
            <groupId>com.micros</groupId>
            <artifactId>ddd</artifactId>
            <version>${externalVendor}</version>
        </dependency>
        <dependency>
            <groupId>com.micros</groupId>
            <artifactId>eeee</artifactId>
            <version>${externalVendor}</version>
        </dependency>
    </dependencies>

Я погуглил и обнаружил, что Spring1.2.6 может не поддерживать JDK8. Пожалуйста, кто-нибудь может помочь мне обо всем, что мне нужно здесь позаботиться. У нас также есть зависимость от какого-то внешнего поставщика, который построен поверх Java5.

1 Ответ

0 голосов
/ 12 января 2019

Если бы Spring был библиотекой, вы бы увидели успех. Это не так, это рамки.

Это означает, что Spring Framework должен понимать плагины, которые обеспечивают логику, которая решает остальную часть "проблемы", решаемой вашей программой. Для правильного внедрения и подключения Spring использует библиотеки, которые проверяют и конфигурируют плагины, написанные для управления Spring.

Эти библиотеки выполняют отражение и обработку байтового кода в плагинах. Это означает, что среда Spring должна понимать байт-код Java 8. Ваша версия Spring этого не делает. Чтобы получить Spring, который вам нужен, вы должны обновить зависимость Apache Maven для Spring; но это вызовет необходимость обновления плагинов для корректной работы с новой версией Spring.

Короче говоря, вам придется перенести гораздо больше зависимостей на более новые версии для поддержки Java 8.

Каркасы могут быть отличными вещами, поскольку они могут сэкономить много времени; но есть риск архитектуры программного обеспечения. Если инфраструктура нуждается в обновлении, все компоненты плагина могут нуждаться в модификации для перехода на новую версию. Весна не исключение.

Вот почему некоторые люди предпочитают использовать библиотеки; но библиотеки не являются панацеей, потому что вам часто нужно решить, как их интегрировать (что означает, что вы пишете свою собственную платформу, но управлять миграцией вперед легче, чем чьей-либо другой структурой).

...