Я использую Mapstruct для генерации объектов dto для моих объектов. Я использую IntelliJ на окнах 10 на турецком языке на своем ноутбуке. Моя проблема была следующей.Проблема с кодировкой для сгенерированного преобразователя исходного кода в Mapstruct на IDEA
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2016-09-05T16:36:08+0300",
comments = "version: 1.0.0.Final, compiler: javac, environment: Java 1.8.0_74 (Oracle Corporation)"
)
public class VeininvoiceMapperImpl implements VeininvoiceMapper {
private final LocalDateMapper localDateMapper = Mappers.getMapper(LocalDateMapper.class);
private final BoxTypeMapper boxTypeMapper = Mappers.getMapper(BoxTypeMapper.class);
private final InvoiceStatusCodeMapper ınvoiceStatusCodeMapper = Mappers.getMapper(InvoiceStatusCodeMapper.class);
private final SenderLabelMapper senderLabelMapper = Mappers.getMapper(SenderLabelMapper.class);
private final PostboxLabelMapper postboxLabelMapper = Mappers.getMapper(PostboxLabelMapper.class);
private final VeinpartnerMapper veinpartnerMapper = Mappers.getMapper(VeinpartnerMapper.class);
@Override
public Invoice veininvoiceToDto(Veininvoice veininvoice) {
if (veininvoice == null) {
return null;
}
Invoice ınvoice = new Invoice();
ınvoice.setInvoiceStatusCode(ınvoiceStatusCodeMapper.statusToDto(veininvoice.getInvoicestatuscode()));
ınvoice.setBoxType(boxTypeMapper.boxtypeToDto(veininvoice.getBoxtype()));
ınvoice.setPartner(veinpartnerMapper.veinpartnerToDto(veininvoice.getVeinpartner()));
ınvoice.setInvoiceNr(veininvoice.getInvoiceNr());
ınvoice.setIsarchive(veininvoice.getIsarchive());
ınvoice.setUblversionid(veininvoice.getUblversionid());
ınvoice.setCustomizationid(veininvoice.getCustomizationid());
ınvoice.setCopyindicator(veininvoice.getCopyindicator());
ınvoice.setIssuedate(localDateMapper.issueDateToCalendar(veininvoice.getIssuedate()));
ınvoice.setIssuetime(veininvoice.getIssuetime());
ınvoice.setServicetypecode(veininvoice.getServicetypecode());
ınvoice.setNote(veininvoice.getNote());
ınvoice.setCurrencycode(veininvoice.getCurrencycode());
ınvoice.setLinecountnumeric(veininvoice.getLinecountnumeric());
ınvoice.setIsactive(veininvoice.getIsactive());
ınvoice.setSenderLabel(senderLabelMapper.senderLabeltoDto(veininvoice.getSenderLabel()));
ınvoice.setPostboxLabel(postboxLabelMapper.postboxLabelToDto(veininvoice.getPostboxLabel()));
ınvoice.setId(veininvoice.getId());
ınvoice.setUuid(veininvoice.getUuid());
return ınvoice;
}
как вы видите, имена переменных, созданные как ı вместо i. И если я попытаюсь развернуть или создать модуль. он терпит неудачу, и все символы класса в классе становятся «?» подобный следующий. ,
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2016-09-05T16:39:20+0300",
comments = "version: 1.0.0.Final, compiler: javac, environment: Java 1.8.0_74 (Oracle Corporation)"
)
public class VeininvoiceMapperImpl implements VeininvoiceMapper {
private final LocalDateMapper localDateMapper = Mappers.getMapper(LocalDateMapper.class);
private final BoxTypeMapper boxTypeMapper = Mappers.getMapper(BoxTypeMapper.class);
private final InvoiceStatusCodeMapper ?nvoiceStatusCodeMapper = Mappers.getMapper(InvoiceStatusCodeMapper.class);
private final SenderLabelMapper senderLabelMapper = Mappers.getMapper(SenderLabelMapper.class);
private final PostboxLabelMapper postboxLabelMapper = Mappers.getMapper(PostboxLabelMapper.class);
private final VeinpartnerMapper veinpartnerMapper = Mappers.getMapper(VeinpartnerMapper.class);
@Override
public Invoice veininvoiceToDto(Veininvoice veininvoice) {
if (veininvoice == null) {
return null;
}
Invoice ?nvoice = new Invoice();
?nvoice.setInvoiceStatusCode(?nvoiceStatusCodeMapper.statusToDto(veininvoice.getInvoicestatuscode()));
?nvoice.setBoxType(boxTypeMapper.boxtypeToDto(veininvoice.getBoxtype()));
?nvoice.setPartner(veinpartnerMapper.veinpartnerToDto(veininvoice.getVeinpartner()));
Я попытался установить кодировку для файла и для всего проекта в UTF-8 (настройки -> Кодировки файлов). Но это не сработало.
Maven для первого сценария выглядит следующим образом.
...
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
<scope>provided</scope>
</dependency>
...
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source> <!-- or higher, depending on your project -->
<target>1.8</target> <!-- or higher, depending on your project -->
<encoding>${project.build.sourceEncoding}</encoding>
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
затем я изменил конфигурацию maven следующим образом. И мне удалось создать классы сопоставления с i вместо ı. Но на модуле make он терпит неудачу, и все персонажи в классе изменились на?. более
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<fork>true</fork>
<compilerArgs>
<arg>-J-Duser.language=en_us</arg>
<arg>-J-Dfile.encoding=UTF-8</arg>
</compilerArgs>
<source>1.8</source> <!-- or higher, depending on your project -->
<target>1.8</target> <!-- or higher, depending on your project -->
<encoding>${project.build.sourceEncoding}</encoding>
<!--<proc>none</proc> <!– disable annotation processing to avoid duplicating maven-processor-plugin output –>-->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
интересно, для того, чтобы проверить это, я создал пример проекта только с зависимостями Mapper и объектом и DTO (ITestObject). И я дал его своему коллеге. Он имеет точно такую же версию для Java и Intellij, а также установил Windows 10 Turkish на своем ноутбуке. Мы изменили -J-Dfile.encoding = UTF-8 на -J-Dfile.encoding = windows-1254. он создал модуль без проблем после Build Success. Файл не поврежден. на всякий случай перекомпилировать модуль, он также испортил файл Mapper как я. Но с такой же конфигурацией я могу сделать модуль успешным после выхода на сбор в maven. Я также попытался установить MAVEN_OPTS
- Dfile.encoding=UTF-8 -Duser.country=TR -Duser.language=es -Duser.variant=Traditional_WIN
Но, к сожалению, он не работал. Я думаю, проблема как-то связана с ОС с IntelliJ. Я использую IDEA 2016.2.3, Maven 3.3.9. Есть ли у кого-то идея, почему это происходит или к чему это может быть связано? Заранее спасибо.
Благодарим за быстрый ответ. Но это не сработало. Я уже проверил его на Notepad ++. Класс имеет кодировку UTF-8. И я добавил уже sourceEncoding и outputEncoding, установленный в UTF-8 в теге свойств и использующий их для кодирования. Но каким-то образом сгенерированные символы i в классах карт изменились? После создания класса или создания модуля. Я решаю больше 6 часов, чтобы решить эту проблему. Но никакого результата ... – Runomu
Предпочтения редактора тоже в порядке? Это должен быть процессор mapstruct. См. Http://mapstruct.org/news/page/3.html искать кодировку –
Да, я уверен. Я проверил его несколько раз для UTF-8. Спасибо за ссылку. Я пробовал компиляторы, заданные для gradle. Но результата нет. если я не могу решить эту проблему сегодня, я думаю, что буду переименовывать dto и продолжать так. :) – Runomu