#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. Банки с жиром больше нельзя использовать в качестве библиотек. Это этап развертывания.