Другой результат построения проекта с Maven на Linux и Windows - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть проект, который собирается с maven 3.5.2 и OpenJDK-1.8.0.И всегда, когда я запускал сервер tomcat в Linux, у меня появлялась ошибка:

Запрошенный компонент находится в процессе создания: существует неразрешимая циклическая ссылка

Я пытаюсьнайти разницу в .war файле, но ничего.Я обнаружил, что проблема указана в порядке файлов в zip-архиве (файл .war).Я полностью обнаружил, что эта проблема вызывает порядок файлов в одном файле .jar, расположенном в ранее указанном .war.Я написал bash-скрипт для перепаковки этого .war-файла, и он отлично работает.Это решило эту проблему в 100% случаев.Вот оно:

#!/bin/bash

set -e

function unpack_jar(){
  local DEPTH=$1
  local DIR=$2
  find "$DIR" -mindepth "$DEPTH" -maxdepth "$DEPTH" -type f -name "app*.jar" -print0 |
  xargs -r0 -P 10 -n1 -I{} bash -c 'unzip -qo {} -d {}.unpacked && rm -f {}'
}

function pack(){
  local DEPTH=$1
  local DIR=$2
  find "$DIR" -mindepth "$DEPTH" -maxdepth "$DEPTH" -type d -name "*.unpacked" -print0 | sort -z |.
  xargs -r0 -P 10 -n1 -I{} bash -c 'F="{}"; echo "Packing $(basename ${F/%.unpacked/})"; pushd {} >/dev/null && find . -print | sort| zip -q "../$(basename "${F/%.unpacked/}")" -@ && popd >/dev/null && rm -rf {}'
}

FILE=$1
DEPTH=3

if [ ! -f "$1" ]; then
  echo "There is no file"
else
  DIR="${FILE/.*}"
  echo "Unzipping $(basename "$FILE")"
  unzip -qo "$FILE" -d "$DIR" && rm -r "$FILE"

  for ((i=1; i<=DEPTH; i++));do
    unpack_jar $i "$DIR"
  done

  for ((i=DEPTH; i>=1; i--)); do
    pack "$i" "$DIR"
  done

  (cd "$DIR" && find . -print | sort | zip -q ../"$(basename "$FILE")" -@ ) &&
  rm -rf "$DIR"
fi

На самом деле эта проблема вызвала порядок файлов в файле .jar.В Windows это отсортировано по алфавиту, а в Linux - нет.Во время запуска tomcat порядок загрузки классов зависит от того, как он записан при развертывании файла .war.Мне нужно форсировать сортировку файлов и каталогов по алфавиту, прежде чем упаковать их.Вопрос: можно ли сортировать файлы в архиве с опцией maven?Или вы можете предложить другой способ получить правильно отсортированные файлы в архиве, не перепаковывая его?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...