Это нормально, если вы поддерживаете разделение между библиотеками и приложениями, и между ними нет прямой связи. Если вы связываете каждую разделяемую библиотеку только с тем приложением, которому это необходимо, библиотеки будут добавлены в загрузчики классов приложений, которые не должны иметь никакой видимости друг для друга, если вы не выполняете какие-то очень необычные операции. Каждое приложение будет загружать свою собственную копию необходимого класса (классов) из своей собственной копии projectA.jar. Если у вас есть что-то, что делает вызовы между приложениями, это повышает риск ClassCastExceptions и Verify или LinkageErrors, но если это только пять полностью отдельных приложений, у вас все будет в порядке.
Я хотел бы отметить, что если вы не поддерживаете разделение должным образом (например, вы объединяете библиотеки или связываете несколько приложений с приложением или связываете их все с загрузчиком классов совместно используемой библиотеки на уровне сервера), то вы может быть в беде. Java может обрабатывать несколько классов под одним и тем же именем, но не внутри одного загрузчика классов - фактически невозможно использовать один и тот же класс из 1 / projectA.jar и 2 / projectA.jar, если они есть в одном приложении. загрузчик классов или общая библиотека. Поскольку у вас есть четкое представление о ваших зависимостях для каждого приложения, надеюсь, это не является для вас высоким риском.