Top.Mail.Ru
Ответы
Аватар пользователя
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Java. Преобразователь артефакта. Как очистить проект от module-info.class?

Всем привет! Может ли кто-то пожалуйста помочь мне, с очищением проекта от module-info.class. Извините меня за то, что я не могу подробнее описать мою проблему, по причине того что сам плохо понимаю это. Artifact Transformer в моем понимании, это то что может очистить артефакт/полученный .jar файл и зависимости от такого ненужного в моем понимании, шлака как module-info.class(Java 9+) Я пишу мод майнкрафт 1.12.2 и после того как я добавил через shadow зависимости в .jar, меня стали беспокоить различные ошибки. Их можно игнорировать, так как он не влияют на работу мода, но я хочу их исправить.

Я следую этому примеру https://github.com/jjohannes/understanding-gradle/ ... Я хотел использовать этот код для регистрации artifact transformer
configurations.compileClasspath {
attributes.attribute(javaModuleAttribute, true)
}
configurations.runtimeClasspath {
attributes.attribute(javaModuleAttribute, true)
}

dependencies.artifactTypes.maybeCreate("jar").attributes.attribute(javaModuleAttribute, false)

dependencies.registerTransform(JavaModuleTransform) {
from.attributes.attribute(ARTIFACT_TYPE_ATTRIBUTE, "jar").attribute(javaModuleAttribute, false)
to.attributes.attribute(ARTIFACT_TYPE_ATTRIBUTE, "jar").attribute(javaModuleAttribute, true)
}
но возникает ошибка, и он не может найти основной класс пакета net.minecraftforge.legacydev

```2. Мне пришлось создать buildSrc/build.gradle и выполнить преобразование артефакта уже в build.gradle, поскольку скрипт groovy может быть импортирован только в основном build.gradle. Я ожидаю, что преобразование артефакта будет выполнено, но сейчас оно не выполняется, поскольку я, по-видимому, неправильно его зарегистрировал. У меня есть println, который должен отображать пути зависимостей при преобразовании ``

Суть в том что мне нужно очистить все зависимости/проект от module-info.class и исправить ошибки связанные с ним
Вот ошибка и код, пожалуйста помогите мне. ERROR:

https://pastebin.com/pbnBXt0C

BUILD.GRADLE(ROOT) and buildSrc/build.gradle

https://pastebin.com/TbwXDdT0

buildSrc/src/main/groovy/org/example/JavaModuleTransform.groovy

https://pastebin.com/hFygDi8d

По дате
По рейтингу
Аватар пользователя
Новичок

Чтобы удалить module-info.class из проекта и его зависимостей, вы можете использовать плагин Jar Jar Links в Gradle. Этот плагин позволяет вам преобразовать и перепаковать артефакты, включая удаление module-info.class.

Вот пример настройки build.gradle для использования плагина Jar Jar Links:

build.gradle:
plugins {
id 'com.github.johnrengelman.shadow' version '7.0.0' // Для сборки с помощью Shadow Plugin
id 'com.github.johnrengelman.plugin.shadow.jarjar' version '3.0.0' // Для запуска Jar Jar Links
}
В этом примере мы используем плагин shadow для создания одного единого JAR-файла, содержащего все зависимости проекта, и плагин shadow.jarjar, чтобы преобразовать и удалить module-info.class при создании окончательного артефакта.

Важно отметить, что вам нужно будет заменить 'net.minecraftforge.legacydev.**' на свой пакет, в котором находится нежелательный module-info.class.

Затем выполните команду ./gradlew shadowJar для сборки проекта и создания артефакта с удаленным module-info.class. После завершения сборки вы найдете окончательный артефакт в папке lib.

...

shadowJar {
zip64 true // Включите zip64, если необходимо
}

jarjar {
from {
configurations.shadow.filter { it.name .endsWith('.jar') } // Применяйте только к зависимостям Shadow Plugin
}
into 'lib' // Папка, куда будут сохранены преобразованные артефакты
archiveName 'my-project.jar' // Имя вашего окончательного артефакта
rule 'net.minecraftforge.legacydev.**' // Правило для исключения определенного пакета или класса
exclude 'module-info.class' // Исключить module-info.class из артефакта
}

...

dependencies {
// Ваши зависимости
}