Включая файлы .properties с .class в JAR после установки mvn - PullRequest
0 голосов
/ 15 декабря 2010

Представьте, что у меня есть проект, который я хочу построить, используя maven. К сожалению, мой проект не соответствует макету maven по умолчанию. Итак, у меня есть две папки с исходными файлами A & B, содержащие .properties файлы с .java источниками.

После mvn install мои .properties файлы не упаковываются в банку с моими сгенерированными .class файлами. Есть ли способ сделать это автоматически, вы, вероятно, предложите использовать тег <resources> для решения такого рода проблем; это, очевидно, работает, я знаю, но мне придется каждый раз указывать, где хранятся мои .properties файлы и где я хочу, чтобы они были упакованы в JAR, это не решение для меня, так как у меня есть несколько исходных папок ( сотни) регулярно обновляется.

<resource>
        <targetPath>com\vermeg\jar2</targetPath>
        <filtering>true</filtering>
        <directory>${basedir}/a/jar2</directory>
        <includes>
          <include>*.properties</include>
        </includes>
        <excludes>
          <exclude>*.java</exclude>
        </excludes>
</resource>

Буду ли я для каждой исходной папки писать это в моем POM, кто-нибудь знает более простой автоматический способ сделать это?

С уважением,

Ответы [ 3 ]

0 голосов
/ 16 декабря 2010

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

0 голосов
/ 17 декабря 2010

Разве нельзя было бы перейти на использование стандартного макета Maven со всеми вашими свойствами в параллельной иерархии «пакетов» в src / main / resources?Тогда вам не нужно ничего указывать;все файлы .properties будут упакованы.

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

Что касается ваших папок с несколькими исходными файлами, мультимодульный проект Maven будетвероятно, лучше всего подойдет, когда A и B будут детьми какого-то нового родительского проекта.

Это может показаться довольно большой работой, но соглашения Maven довольно разумны, и это может быть болезненным опытом, еслиты идешь против них.

0 голосов
/ 15 декабря 2010

Как правило, вы можете использовать Maven свойства и профили для решения этой проблемы.

Например, измените ваш pom на:

<resource>
    <targetPath>${myresources.targetpath}</targetPath>
    <directory>${myresources.directory}</directory>
    ...
</resource>

и определите myresources.directory и myresources.targetpath в командной строке, используя -Dname=value или в условном профиле, или используя другие свойства, доступные в вашей сборке.

Если вы объясните структуру и / или условия вашего проекта и их отношение к вашей переменной (targetPath и каталог), я могу помочь вам с вашим вопросом.

...