Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Как избавится от мусора в jar?

0xLairon1

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
0xLairon1
upload_2023-3-13_22-9-9.png
Я использую lombok в своих плагинах. И мне он очень удобен, но он почемуто компилируется в jar и из за этого она весит в несколько раз больше.
Как я успел выяснить происходит это из за maven-shade-plugin который собирает зависимости в jar. Но как я только не пытался добавить lombok в игнор, у меня ничего не получалось.
HTML:
<configuration>
  <shadedArtifactAttached>true</shadedArtifactAttached>
  <shadedClassifierName>shaded</shadedClassifierName>
  <artifactSet>
    <excludes>
      <exclude>org.projectlombok:lombok</exclude>
    </excludes>
  </artifactSet>
</configuration>
Подскажите кто знает что делать
 
Собрал версию с гита - ломбка тут нет. Вопрос ещё актуален?

В любом случае, большинство библиотек исключать нельзя, поскольку они используются в рантайме.
Если задача уменьшить размер джарника, то можно пойти двумя путями:

1) Указать в plugin.yml секцию libraries, а в ней список всех библиотек из maven-central. Но есть две проблем: это работает только на новых версиях, вроде с 1.17. Ну, и нельзя указать другой репозиторий. Тянет только из центрального

2) Подгружать библиотеки самостоятельно в рантайме. Так делает, например, LuckPerms

Вот так сейчас выглядит джарник после сборки твоего проекта при помощи mvn package:
upload_2023-3-14_14-19-37.png
 
Я собираю через clean install
upload_2023-3-14_14-42-5.png
И у меня собирается в месте с ломбоком
upload_2023-3-14_14-42-32.png
Сейчас попробовал через package, все равно пакет ломбока присутствует. Не пойму в чем может быть проблема
 
Я при сборке удалил данную зависимость - она и не загрузилась из реп, и не требовалась для сборки:
Код:
        <dependency>
            <groupId>com.lairon.libs</groupId>
            <artifactId>0xMessageUtils</artifactId>
            <version>1.1-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
Но вряд ли проблема в этом.

Ещё удалил outputDirectory у maven-jar-plugin в модуле xChat-Bukkit.

Таким образом, готовый джарник находится по данному пути:
xChat\xChat-Bukkit\target\xChat-Bukkit-1.0-SNAPSHOT.jar\

Даже при сборке при помощи clean install -U не добавляет ломбок в джарник.

При сборке никаких ошибок нет, выполняется корректно?
 
Ещё удалил outputDirectory у maven-jar-plugin в модуле xChat-Bukkit.
Когда хочу посмотреть что в джарнике сам удаляю это.

При сборке никаких ошибок нет, выполняется корректно?
При сборке модуля Core нету
При сборке модуля Bukkit только варны:
Код:
[WARNING] Discovered module-info.class. Shading will break its strong encapsulation.
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, adventure-api-4.9.3.jar, adventure-key-4.9.3.jar, adventure-text-minimessage-4.12.0.jar, annotations-19.0.0.jar, checker-qual-3.18.0.jar, commons-lang-2.6.jar, examination-api-1.3.0.jar, examination-string-1.3.0.jar, gson-2.8.8.jar, jsr305-1.3.9.jar, minimessage-text-2.0.3.jar, text-adapter-bukkit-3.0.3.jar, text-api-3.0.0.jar, text-serializer-gson-3.0.0.jar, text-serializer-legacy-3.0.0.jar, xChat-Bukkit-1.0-SNAPSHOT.jar, xChat-Core-1.0-SNAPSHOT.jar define 1 overlapping resource:
[WARNING]   - META-INF/MANIFEST.MF
[WARNING] checker-qual-3.18.0.jar, commons-lang-2.6.jar define 1 overlapping resource:
[WARNING]   - META-INF/LICENSE.txt
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, adventure-api-4.9.3.jar define 208 overlapping classes:
[WARNING]   - net.kyori.adventure.Adventure
[WARNING]   - net.kyori.adventure.audience.Audience
[WARNING]   - net.kyori.adventure.audience.Audiences
[WARNING]   - net.kyori.adventure.audience.EmptyAudience
[WARNING]   - net.kyori.adventure.audience.ForwardingAudience
[WARNING]   - net.kyori.adventure.audience.ForwardingAudience$Single
[WARNING]   - net.kyori.adventure.audience.ForwardingAudienceOverrideNotRequired
[WARNING]   - net.kyori.adventure.audience.MessageType
[WARNING]   - net.kyori.adventure.bossbar.BossBar
[WARNING]   - net.kyori.adventure.bossbar.BossBar$Color
[WARNING]   - 198 more...
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, adventure-key-4.9.3.jar define 7 overlapping classes:
[WARNING]   - net.kyori.adventure.key.InvalidKeyException
[WARNING]   - net.kyori.adventure.key.Key
[WARNING]   - net.kyori.adventure.key.KeyImpl
[WARNING]   - net.kyori.adventure.key.Keyed
[WARNING]   - net.kyori.adventure.key.KeyedValue
[WARNING]   - net.kyori.adventure.key.KeyedValueImpl
[WARNING]   - net.kyori.adventure.key.Namespaced
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, examination-api-1.3.0.jar define 22 overlapping classes:
[WARNING]   - net.kyori.examination.AbstractExaminer
[WARNING]   - net.kyori.examination.Examinable
[WARNING]   - net.kyori.examination.ExaminableProperty
[WARNING]   - net.kyori.examination.ExaminableProperty$1
[WARNING]   - net.kyori.examination.ExaminableProperty$10
[WARNING]   - net.kyori.examination.ExaminableProperty$11
[WARNING]   - net.kyori.examination.ExaminableProperty$12
[WARNING]   - net.kyori.examination.ExaminableProperty$13
[WARNING]   - net.kyori.examination.ExaminableProperty$14
[WARNING]   - net.kyori.examination.ExaminableProperty$15
[WARNING]   - 12 more...
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, examination-api-1.3.0.jar, examination-string-1.3.0.jar define 1 overlapping classes:
[WARNING]   - META-INF.versions.9.module-info
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, examination-string-1.3.0.jar define 5 overlapping classes:
[WARNING]   - net.kyori.examination.string.MultiLineStringExaminer
[WARNING]   - net.kyori.examination.string.MultiLineStringExaminer$Instances
[WARNING]   - net.kyori.examination.string.StringExaminer
[WARNING]   - net.kyori.examination.string.StringExaminer$Instances
[WARNING]   - net.kyori.examination.string.Strings
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, annotations-19.0.0.jar define 50 overlapping classes:
[WARNING]   - org.intellij.lang.annotations.Flow
[WARNING]   - org.intellij.lang.annotations.Identifier
[WARNING]   - org.intellij.lang.annotations.JdkConstants
[WARNING]   - org.intellij.lang.annotations.JdkConstants$AdjustableOrientation
[WARNING]   - org.intellij.lang.annotations.JdkConstants$BoxLayoutAxis
[WARNING]   - org.intellij.lang.annotations.JdkConstants$CalendarMonth
[WARNING]   - org.intellij.lang.annotations.JdkConstants$CursorType
[WARNING]   - org.intellij.lang.annotations.JdkConstants$FlowLayoutAlignment
[WARNING]   - org.intellij.lang.annotations.JdkConstants$FontStyle
[WARNING]   - org.intellij.lang.annotations.JdkConstants$HorizontalAlignment
[WARNING]   - 40 more...
[WARNING] 0xMessageUtils-1.1-SNAPSHOT.jar, adventure-text-minimessage-4.12.0.jar define 97 overlapping classes:
[WARNING]   - net.kyori.adventure.text.minimessage.ArgumentQueueImpl
[WARNING]   - net.kyori.adventure.text.minimessage.Context
[WARNING]   - net.kyori.adventure.text.minimessage.ContextImpl
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessage
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessage$Builder
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessage$Provider
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessageImpl
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessageImpl$BuilderImpl
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessageImpl$Instances
[WARNING]   - net.kyori.adventure.text.minimessage.MiniMessageParser
[WARNING]   - 87 more...
[WARNING] maven-shade-plugin has detected that some class files are
[WARNING] present in two or more JARs. When this happens, only one
[WARNING] single version of the class is copied to the uber jar.
[WARNING] Usually this is not harmful and you can skip these warnings,
[WARNING] otherwise try to manually exclude artifacts based on
[WARNING] mvn dependency:tree -Ddetail=true and the above output.
[WARNING] See http://maven.apache.org/plugins/maven-shade-plugin/

Убрал свою либу из зависимостей(Все равно скорее всего использовать не буду)
Пакет ломбока пропал. Но все равно почемуто тот же commons-lang присутствует. У меня есть зависимость от него в Core модуле, так как в Core модуле не должно быть зависимости от Paper я добавил туда commons-lang. Но в тоже время компилировать его в jar Bukkita мне не нужно так как он уже есть в Paper.
Запушил новую версию на гит

Еще непонятно откуда берется javax
 
Но все равно почемуто тот же commons-lang присутствует. У меня есть зависимость от него в Core модуле, так как в Core модуле не должно быть зависимости от Paper я добавил туда commons-lang. Но в тоже время компилировать его в jar Bukkita мне не нужно так как он уже есть в Paper.
Можно пойти двумя путями:
1) В родительском модуле (Core) полностью исключить зависимость из сборки путём указания scope
2) В дочернем модуле (Bukkit) добавить excludes в параметры maven-shade-plugin

Еще непонятно откуда берется javax
javax.annotations - часть библиотеки com.google.code.findbugs:jsr305. А эта библиотека тянется из другой зависимости. Можешь построить дерево зависимостей, как раз увидишь там: mvn dependency:tree
upload_2023-3-14_17-33-38.png

P.S. Рекомендуется полностью исключать директорию .idea из maven-проектов. Наличие .idea в проекте создает ряд сложностей. У тебя несколько .gitignore, но используется тот, что в корне. Рекомендую оставить только его, а остальные удалить.

Если не всю .idea, то хотя бы то, что указано тут: https://intellij-support.jetbrains....manage-projects-under-Version-Control-Systems
Хотя я считаю, что этого недостаточно. Помимо перечисленного требуется исключать ещё как минимум misc.xml, который там не указан
 
Можно пойти двумя путями:
1) В родительском модуле (Core) полностью исключить зависимость из сборки путём указания scope
2) В дочернем модуле (Bukkit) добавить excludes в параметры maven-shade-plugin


javax.annotations - часть библиотеки com.google.code.findbugs:jsr305. А эта библиотека тянется из другой зависимости. Можешь построить дерево зависимостей, как раз увидишь там: mvn dependency:tree
Посмотреть вложение 64592

P.S. Рекомендуется полностью исключать директорию .idea из maven-проектов. Наличие .idea в проекте создает ряд сложностей. У тебя несколько .gitignore, но используется тот, что в корне. Рекомендую оставить только его, а остальные удалить.

Если не всю .idea, то хотя бы то, что указано тут: https://intellij-support.jetbrains....manage-projects-under-Version-Control-Systems
Хотя я считаю, что этого недостаточно. Помимо перечисленного требуется исключать ещё как минимум misc.xml, который там не указан

Вынес зависимость от MiniMessage в libs в plugin.yml. Если буду добавлять поддержку версий ниже чем 1 17 то думаю создам просто отдельный модуль по это.

Теперь осталось только commons.lang. Не пойму какой scope нужно установить чтобы child проекты не тянули зависимость к себе, написано что при provided оно не должно компилироваться, но оно компилирует
 
P.S. Рекомендуется полностью исключать директорию .idea из maven-проектов. Наличие .idea в проекте создает ряд сложностей. У тебя несколько .gitignore, но используется тот, что в корне. Рекомендую оставить только его, а остальные удалить.

Если не всю .idea, то хотя бы то, что указано тут: https://intellij-support.jetbrains....manage-projects-under-Version-Control-Systems
Хотя я считаю, что этого недостаточно. Помимо перечисленного требуется исключать ещё как минимум misc.xml, который там не указан
Сделал, спасибо
 

Поделиться этой страницей

Назад
Верх