У меня есть проект Java, созданный с использованием Gradle и генератора кода MapStruct для генерации кода сопоставления. Я намеренно включил предупреждения об устаревании, так как хочу быть уведомлен, если в конечном итоге вызову устаревший код, например при обновлении версий библиотеки.
У меня есть интерфейс сопоставителя MapStruct (с аннотацией @Mapper), который содержит метод сопоставления. Метод сопоставления и один из используемых им пользовательских методов сопоставления используются функцией, которая будет удалена в следующей основной версии программного обеспечения, но должна остаться в второстепенных версиях, предшествующих этому моменту. Поэтому я пометил эти два метода как @Deprecated, чтобы сообщить, что они удаляются, и не пропустить их удаление при удалении другого устаревшего кода.
Когда я компилирую код, я получаю два предупреждения об устаревании в конкретном классе, автоматически созданном MapStruct для интерфейса преобразователя: одно для реализации устаревшего метода сопоставления, а другое для вызова пользовательского метода сопоставления.
Цель
Я надеюсь найти способ предотвратить появление этих предупреждений об устаревании, сохраняя при этом предупреждения об устаревании для моего собственного (не созданного автоматически) кода.
Если бы я написал код вручную, я бы пометил его @Deprecated, что подавило бы это предупреждение. В качестве альтернативы есть опция @SuppressWarnings("deprecation") для ее подавления. Однако MapStruct в настоящее время не позволяет добавлять аннотации к сгенерированному коду.
Другой вариант, который мне приходит в голову, заключается в том, что, возможно, в Gradle есть способ включить предупреждения об устаревании только для сгенерированных классов (в build/generated/sources/annotationProcessor/java), но не для рукописных классов (в src/main/java). Я не вижу простого способа сделать это. На форуме есть старое сообщение девятилетней давности, в котором обсуждается эта проблема, хотя я не уверен, как применить его к текущему ландшафту Gradle.
Как я могу подавить автоматически создаваемые предупреждения об устаревании класса картографа, не отключая предупреждения об устаревании для моего негенерируемого кода в проекте?
Пример
build.gradle
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
}
compileJava {
options.deprecation = true
}
Классы Java
public class Source {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
public class Target {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
import org.mapstruct.Mapper;
@Mapper
public interface ExampleMapping {
@Deprecated
Target map(Source source);
@Deprecated
default String mapString(String s) {
return s.toUpperCase();
}
}
Построение вывода
$ ./gradlew build
> Task :compileJava
/path/to/project/build/generated/sources/annotationProcessor/java/main/com/example/ExampleMappingImpl.java:13: warning: [deprecation] map(Source) in ExampleMapping has been deprecated
public Target map(Source source) {
^
/path/to/project/build/generated/sources/annotationProcessor/java/main/com/example/ExampleMappingImpl.java:20: warning: [deprecation] mapString(String) in ExampleMapping has been deprecated
target.setValue( mapString( source.getValue() ) );
^
2 warnings
BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed
Сгенерированный код
import javax.annotation.processing.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-07-16T22:41:15-0500",
comments = "version: 1.4.2.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-7.1.1.jar, environment: Java 11.0.9.1 (AdoptOpenJDK)"
)
public class ExampleMappingImpl implements ExampleMapping {
@Override
public Target map(Source source) {
if ( source == null ) {
return null;
}
Target target = new Target();
target.setValue( mapString( source.getValue() ) );
return target;
}
}
Можно ли в Gradle предотвратить появление предупреждений об устаревании в коде, автоматически создаваемом обработчиком а ⇐ JAVA
Программисты JAVA общаются здесь
1776970242
Anonymous
У меня есть проект Java, созданный с использованием Gradle и генератора кода MapStruct для генерации кода сопоставления. Я намеренно включил предупреждения об устаревании, так как хочу быть уведомлен, если в конечном итоге вызову устаревший код, например при обновлении версий библиотеки.
У меня есть интерфейс сопоставителя MapStruct (с аннотацией @Mapper), который содержит метод сопоставления. Метод сопоставления и один из используемых им пользовательских методов сопоставления используются функцией, которая будет удалена в следующей основной версии программного обеспечения, но должна остаться в второстепенных версиях, предшествующих этому моменту. Поэтому я пометил эти два метода как @Deprecated, чтобы сообщить, что они удаляются, и не пропустить их удаление при удалении другого устаревшего кода.
Когда я компилирую код, я получаю два предупреждения об устаревании в конкретном классе, автоматически созданном MapStruct для интерфейса преобразователя: одно для реализации устаревшего метода сопоставления, а другое для вызова пользовательского метода сопоставления.
Цель
Я надеюсь найти способ предотвратить появление этих предупреждений об устаревании, сохраняя при этом предупреждения об устаревании для моего собственного (не созданного автоматически) кода.
Если бы я написал код вручную, я бы пометил его @Deprecated, что подавило бы это предупреждение. В качестве альтернативы есть опция @SuppressWarnings("deprecation") для ее подавления. Однако MapStruct в настоящее время не позволяет добавлять аннотации к сгенерированному коду.
Другой вариант, который мне приходит в голову, заключается в том, что, возможно, в Gradle есть способ включить предупреждения об устаревании только для сгенерированных классов (в build/generated/sources/annotationProcessor/java), но не для рукописных классов (в src/main/java). Я не вижу простого способа сделать это. На форуме есть старое сообщение девятилетней давности, в котором обсуждается эта проблема, хотя я не уверен, как применить его к текущему ландшафту Gradle.
Как я могу подавить автоматически создаваемые предупреждения об устаревании класса картографа, не отключая предупреждения об устаревании для моего негенерируемого кода в проекте?
Пример
[b]build.gradle[/b]
plugins {
id 'java'
}
repositories {
mavenCentral()
}
dependencies {
annotationProcessor 'org.mapstruct:mapstruct-processor:1.4.2.Final'
implementation 'org.mapstruct:mapstruct:1.4.2.Final'
}
compileJava {
options.deprecation = true
}
[b]Классы Java[/b]
public class Source {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
public class Target {
private String value;
public String getValue() { return value; }
public void setValue(String value) { this.value = value; }
}
import org.mapstruct.Mapper;
@Mapper
public interface ExampleMapping {
@Deprecated
Target map(Source source);
@Deprecated
default String mapString(String s) {
return s.toUpperCase();
}
}
[b]Построение вывода[/b]
$ ./gradlew build
> Task :compileJava
/path/to/project/build/generated/sources/annotationProcessor/java/main/com/example/ExampleMappingImpl.java:13: warning: [deprecation] map(Source) in ExampleMapping has been deprecated
public Target map(Source source) {
^
/path/to/project/build/generated/sources/annotationProcessor/java/main/com/example/ExampleMappingImpl.java:20: warning: [deprecation] mapString(String) in ExampleMapping has been deprecated
target.setValue( mapString( source.getValue() ) );
^
2 warnings
BUILD SUCCESSFUL in 3s
2 actionable tasks: 2 executed
[b]Сгенерированный код[/b]
import javax.annotation.processing.Generated;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-07-16T22:41:15-0500",
comments = "version: 1.4.2.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-7.1.1.jar, environment: Java 11.0.9.1 (AdoptOpenJDK)"
)
public class ExampleMappingImpl implements ExampleMapping {
@Override
public Target map(Source source) {
if ( source == null ) {
return null;
}
Target target = new Target();
target.setValue( mapString( source.getValue() ) );
return target;
}
}
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия