Знаток 2 плагина блока ударяет некоторые файлы META-INF

В Википедии есть хороший обзор [методов мутатора ( https://en.wikipedia.org/wiki/Mutator_method ), которые представляют собой методы установки и как они работают на разных языках.

Краткая версия: если вы хотите ввести валидацию или другую логику, которая выполняется при модификации объекта, было бы неплохо иметь установщик, чтобы вставить эту логику. Также вы можете скрыть, как вы храните вещи. Таким образом, это причины наличия геттеров / сеттеров. Точно так же для получателей вы можете иметь логику, которая предоставляет значения по умолчанию или значения, которые зависят, например, от конфигурация для таких вещей, как Locale, кодировка символов и т. д. Есть много веских причин, чтобы хотеть иметь логику, кроме получения или установки переменной экземпляра.

Очевидно, что если у вас есть геттеры и сеттеры, вы не хотите, чтобы люди обходили их, напрямую манипулируя состоянием объекта, поэтому вы должны сохранять переменные экземпляра закрытыми.

Другие вопросы, которые следует учитывать, включают в себя, хотите ли вы, чтобы ваши объекты вообще были изменяемыми (если нет, делайте поля окончательными), хотите ли вы сделать изменение состояния объекта потокобезопасным, например, с помощью. замки, синхронизированные и т. д.

10
задан Rich Seller 30 July 2009 в 21:24
поделиться

3 ответа

Я бы посоветовал вместо этого использовать maven-shade-plugin. Если вы посмотрите на pom для cxf-bundle ( http://svn.apache.org/repos/asf/cxf/trunk/distribution/bundle/all/pom.xml ), вы увидите, как вы можете использовать преобразователи тени для объединения spring.schemas и других необходимых файлов.

5
ответ дан 3 December 2019 в 19:35
поделиться

Я разработал это, и вот подробности:

Во-первых, нет способа указать, включает или исключает файл, если вы используете встроенный дескриптор сборки jar-with-dependencies.

В документации подключаемого модуля сборки приведен пример дескриптора jar-with-dependencies здесь .

Я скопировал и вставил этот дескриптор в файл exec-jar.xml в каталоге моего проекта. Затем в pom я изменил плагин сборки, чтобы он ссылался на этот дескриптор. Вот выдержка:

<build>
  <plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-3</version>
        <configuration>
            <descriptors>
                <descriptor>exec-jar.xml</descriptor>
            </descriptors>
            <archive>
                <manifest>
                    <mainClass>com.package.MyMainClass</mainClass>
                </manifest>
            </archive>
        </configuration>
        <executions>
            <execution>
                <id>make-assembly</id>
                <phase>package</phase>
                <goals>
                    <goal>single</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
  </plugins>
</build>

Этот бит дескриптора связывает сборку с фазой пакета жизненного цикла и ссылается на дескриптор exec-jar.xml. Выполнение этого пакета подтвердило, что jar был построен так же, как и с предопределенным дескриптором.

Итак, тогда возникает вопрос изменения exec-jar. xml, чтобы исключить файлы CXF, конфликтующие с файлами Spring. Вот мой дескриптор сборки, который сделал это:

<assembly>
  <id>jar-with-dependencies</id>
  <formats>
    <format>jar</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySet>
      <unpack>true</unpack>
      <unpackOptions>
        <excludes>
            <exclude>cxf*/META-INF/spring.handlers</exclude>
            <exclude>cxf*/META-INF/spring.schemas</exclude>
        </excludes>
      </unpackOptions>
      <scope>runtime</scope>
    </dependencySet>
  </dependencySets>
  <fileSets>
    <fileSet>
      <directory>${project.build.outputDirectory}</directory>
    </fileSet>
  </fileSets>
</assembly>

А вот и загвоздка. Если вы сделаете это с выпущенным в настоящее время подключаемым модулем сборки версии 2.1, это приведет к сбою тега как «неожиданно». Тег поддерживается в невыпущенной версии 2.2 плагина. Обратите внимание, что в приведенном выше отрывке из pom-файла я указываю maven-assembly-plugin версии 2.2-beta-3, которая была последней на момент написания.

Это успешно построило исполняемый файл jar, а в Spring были все обработчики и схемы ему нужно было инициализировать мое приложение.

Тег поддерживается в невыпущенной версии 2.2 плагина. Обратите внимание, что в приведенном выше отрывке из pom-файла я указываю maven-assembly-plugin версии 2.2-beta-3, которая была последней на момент написания.

Это успешно построило исполняемый файл jar, а в Spring были все обработчики и схемы ему нужно было инициализировать мое приложение.

Тег поддерживается в невыпущенной версии 2.2 плагина. Обратите внимание, что в приведенном выше отрывке из pom-файла я указываю maven-assembly-plugin версии 2.2-beta-3, которая была последней на момент написания.

Это успешно построило исполняемый файл jar, а в Spring были все обработчики и схемы ему нужно было инициализировать мое приложение.

2
ответ дан 3 December 2019 в 19:35
поделиться

Вы также можете обойти эту проблему, получив файлы spring.schemas и spring.handlers из нужного вам дистрибутива Spring и поместив их в каталог src / main / resources / META-INF ваших проектов. . Поскольку они упакованы в последнюю очередь, вы получите нужную версию. Я нашел идею здесь

1
ответ дан 3 December 2019 в 19:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: