Управление различными каталогами ресурсов - PullRequest
0 голосов
/ 11 января 2012

Я использую Eclipse с плагином Maven m2e.Мой проект использует XML-файлы конфигурации, расположенные под config.Макет проекта Maven говорит, что вы должны поместить подобные вещи в srv/main/resources, и тут начинается проблема ...

В приложении каталог config жестко связан с корнем проекта.Могу ли я как-то, может быть, даже через POM, обмануть Eclipse и Maven, чтобы сделать программное обеспечение работоспособным, даже если файлы находятся в src/main/resources?

РЕДАКТИРОВАТЬ: Макет Maven говорит только src,target, pom.xml и некоторые текстовые файлы находятся в корне.Но мое развернутое программное обеспечение требует конфигурации в корне.Это не совсем подходит, если моя прикладная программа вызывает что-то вроде нового файла («config / someXml.xml»).Мое программное обеспечение должно выглядеть в config / someXml.xml и src / main / resoruces / config / someXml.xml в зависимости от того, развернуто ли программное обеспечение или отлаживается.

Как это делают другие проекты?Должен ли я как-то изменить свой код для указания пути к каталогу?

Ответы [ 4 ]

1 голос
/ 11 января 2012

Изменить приложение. Ваше приложение не должно знать, что является корнем проекта. Непонятно, что бы это значило, если бы он работал из распространяемого вами файла jar.

Самым обычным делом было бы переместить файлы конфигурации в src/main/resources или что-то еще, а затем загрузить их как ресурсы classpath .

Если вы не хотите этого делать, укажите путь к каталогу config для приложения в качестве системного свойства, используя аргумент -D для java, и найдите соответствующие файлы конфигурации. В Eclipse вы можете установить это в конфигурации запуска. В командной строке вы можете установить его в сценарии оболочки, который запускает ваше приложение. Или, если вы используете сервер приложений или другой контейнер, используйте какой-то механизм, специфичный для этого.

1 голос
/ 12 января 2012

Исходя из моего собственного опыта, самый распространенный и эффективный способ - заставить ваше приложение разрешить требуемый файл конфигурации из нескольких мест в предопределенном порядке, псевдокод:

Properties config = null;
// try load config file from pre-defined location, first attempt
config = read("config/config.xml");
// if nothing is here, load config file from classpath, default.
if (config == null)
  config = read("src/main/resources/config.xml");

Файл config.xml в каталоге src / main / resources всегда поставляется с окончательным исполняемым файлом jar (внутри файла jar), если в папке config ничего не представлено, всегда используйте его по умолчанию. Таким образом, в процессе разработки приложение может использовать src / main / resources / config.xml, не касаясь существования config / config.xml, при переходе к развертыванию оно начнет использовать config / config.xml, если он представлен.

1 голос
/ 11 января 2012

Я не уверен, что вы пытаетесь сделать, но вы можете указать дополнительные каталоги ресурсов в элементе build вашего pom.

<build>
  <resources>
    <resource>
      <directory>config</directory>
      <includes>
        <include>**/*</include>
      </includes>
    </resource>
  </resources>
</build>

Помните, что все, что он делает, это копирует все файлы из каталога config в ваш выходной каталог (по умолчанию target\classes), поэтому из представления процесса сборки действительно не имеет значения, находятся они в config или в src/main/resources (просто больше печатать с вашей стороны).

0 голосов
/ 12 января 2012

не знаю, точно ли это то, что вы пытаетесь достичь, но вы смотрели на maven-resources-plugin, я думаю, что Александр уже заявил?

вы можете определить и скопировать дополнительные ресурсы, необходимые для запуска проекта, Я цитирую .. [1]

Вы можете использовать ресурсы копирования mojo для копирования ресурсов, которые не находятся в макете по умолчанию maven или не объявлены в элементе build / resources, и присоединить их к фазе

[1] http://maven.apache.org/plugins/maven-resources-plugin/examples/copy-resources.html

...