1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем 0xLairon1, 13 мар 2023.

  1. Автор темы
    0xLairon1

    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>
    Подскажите кто знает что делать
     
  2. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
  3. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Собрал версию с гита - ломбка тут нет. Вопрос ещё актуален?

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

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

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

    Вот так сейчас выглядит джарник после сборки твоего проекта при помощи mvn package:
    upload_2023-3-14_14-19-37.png
     
  4. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Я собираю через clean install
    upload_2023-3-14_14-42-5.png
    И у меня собирается в месте с ломбоком
    upload_2023-3-14_14-42-32.png
    Сейчас попробовал через package, все равно пакет ломбока присутствует. Не пойму в чем может быть проблема
     
  5. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Я при сборке удалил данную зависимость - она и не загрузилась из реп, и не требовалась для сборки:
    Код:
            <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 не добавляет ломбок в джарник.

    При сборке никаких ошибок нет, выполняется корректно?
     
  6. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Когда хочу посмотреть что в джарнике сам удаляю это.

    При сборке модуля 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
     
  7. Dymeth

    Dymeth Активный участник Пользователь

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Можно пойти двумя путями:
    1) В родительском модуле (Core) полностью исключить зависимость из сборки путём указания scope
    2) В дочернем модуле (Bukkit) добавить excludes в параметры maven-shade-plugin

    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, который там не указан
     
  8. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

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

    Теперь осталось только commons.lang. Не пойму какой scope нужно установить чтобы child проекты не тянули зависимость к себе, написано что при provided оно не должно компилироваться, но оно компилирует
     
  9. Автор темы
    0xLairon1

    0xLairon1 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    0xLairon1
    Сделал, спасибо
     

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