java-компилятор выдает ошибку при компиляции кода внутри толстой банки

#java #spring-boot #javacompiler

Вопрос:

У меня есть приложение spring boot, которое динамически генерирует код во время выполнения, а затем компилируется при запуске приложения. Когда приложение запускается в IntelliJ, сгенерированный код компилируется без каких-либо ошибок, но когда я создаю толстую банку, генерирую и компилирую код, я получаю ошибку отсутствия пакета и несколько других ошибок

 error: package javax.validation.constraints does not exist
import javax.validation.constraints.Size;
error: package javax.validation.constraints does not exist
import javax.validation.constraints.Size;
 

вот как я компилирую код

  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
          StandardJavaFileManager sjfm = compiler.getStandardFileManager(null, null, null);
          Iterable fileObjects = sjfm.getJavaFileObjects(entityFiles.toArray(new Path[] {}));
          List<String> optionList = new ArrayList<String>();
          JavaCompiler.CompilationTask task =
              compiler.getTask(null, null, null, optionList, null, fileObjects);
          task.call();
          sjfm.close();
 

Вот как выглядит сгенерированный код

 package com.abc.def.entities;

import java.io.Serializable;
import java.lang.String;
import java.time.LocalDate;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.IdClass;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

@Entity
@Table(
    name = "TABLE123"
)
public class EntityV1 implements Serializable {



  @Size(
      min = 1,
      max = 16
  )
  private String anumber;

  @Size(
      min = 15,
      max = 16
  )
  @Id
  private String cnumber;

  @NotNull
  private LocalDateTime acdt

  @Size(
      min = 1,
      max = 16
  )
  private String cu_number;

  @Size(
      min = 1,
      max = 16
  )
 
}
 

Я извлек толстую банку, чтобы посмотреть, находятся ли зависимости в банке, и они там,
Похоже, компилятор не может распознать какие-либо аннотации. Кто-нибудь может помочь?

Комментарии:

1. В банках Spring Boot fat есть некоторый пользовательский загрузчик классов для загрузки банок внутри банок. Тебе действительно нужна толстая банка?

2. да, сейчас нам действительно нужна толстая банка

3. Банки с жиром больше нельзя использовать в качестве библиотек. Это этап развертывания.