Самый простой и самый точный способ получить контекст фрагмента, который я нашел, - это получить его непосредственно из ViewGroup
, когда вы вызываете метод onCreateView
, по крайней мере, здесь вы уверены, что не получите null для getActivity()
:
public class Animal extends Fragment {
Context thiscontext;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
thiscontext = container.getContext();
Можно пойти с чем-то вроде этого. Обратите внимание на то, что необходимо определить два профиля - тот, который будет активирован для корневого каталога и один для детей. Очевидно, это предполагает, что у детей будет та же структура, но это может быть легко адаптировано.
<profiles>
<profile>
<id>root-dir</id>
<activation>
<file>
<exists>${basedir}/lib</exists>
</file>
</activation>
<properties>
<project.libdir>${basedir}/lib</project.libdir>
</properties>
</profile>
<profile>
<id>child-dir</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<project.libdir>${basedir}/../../lib</project.libdir>
</properties>
</profile>
</profiles>
Со Знатоком 3.6.1, из дочернего проекта, $ {parent.basedir} возвращает полностью определенный каталог родительского проекта.
Я не знаю "хорошего" способа найти корень многомодульного проекта. Но, возможно, вы можете немного улучшить свой нынешний подход.
Первым альтернативным вариантом было бы создать дополнительный модуль непосредственно в корневом проекте, объявить все EAR как зависимости в нем и использовать dependency: copy-dependencies
для копирования зависимостей модуля в для развертывания
каталога (относительно). Да, путь все равно будет относительным, но поскольку конфигурация плагина зависимостей будет централизованной, меня это не раздражает.
Второй альтернативой может быть использование подключаемого модуля сборки Maven вместо подключаемого модуля зависимостей Maven для создания дистрибутива с использованием формата dir (это создаст распространение в каталоге). На самом деле я бы так и поступил.