Maven Compile не может найти каталог src/main/resources

Я пытаюсь настроить среду интеграционного тестирования, используя Maven для своего проекта, но получаю следующую ошибку, когда запускаю цель компиляции.

[ОШИБКА] Не удалось выполнить цель org.apache.maven.plugins:maven-resources-plugin:3.0.2:ресурсы (ресурсы по умолчанию) в проекте mavenintegrationtest: ошибка при загрузке файла свойств '/Users/xxx/dev/poc/java /mavenintegrationtest/profiles/dev/config.properties' -> [Справка 1]

Ошибка, кажется, жалуется, что не может найти файл config.properties в правильном месте. По какой-то причине он удалил бит «src/main/resources» из пути к файлу.

Таким образом, правильный полный путь: /Users/xxx/dev/poc/java/mavenintegrationtest/src/main/resources/profiles/dev/config.properties , но по какой-то причине он удалил src/main/resources и поэтому ищет, /Users/xxx/dev/poc/java/mavenintegrationtest/profiles/dev/config.properties Кто-нибудь знает, что вызывает это?

Мой POM показан ниже, и я получаю эту ошибку, когда раскомментирую следующий тег «фильтр»,

<filter>${basedir}/profiles/${build.profile.id}/config.properties</filter>

Я попытался удалить оператор ${basedir} и все равно получаю ту же ошибку.

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.stackoverflow</groupId>
  <artifactId>mavenintegrationtest</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>mavenintegrationtest</name>
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <filters>
      <filter>${basedir}/profiles/${build.profile.id}/config.properties</filter>
    </filters>

    <resources>
      <resource>
        <filtering>true</filtering>
        <directory>${basedir}/src/main/resources</directory>
      </resource>
    </resources>

  </build>
  <!-- Profile configuration -->
  <profiles>
    <!-- The configuration of the development profile -->
    <profile>
      <id>dev</id>
      <!-- The development profile is active by default -->
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <properties>
        <build.profile.id>dev</build.profile.id>
      </properties>
    </profile>
    <!-- The configuration of the integration-test profile -->
    <profile>
      <id>integration-test</id>
      <properties>
        <build.profile.id>integration-test</build.profile.id>
      </properties>
    </profile>
  </profiles>

</project>

введите здесь описание изображения


person robbie70    schedule 05.04.2019    source источник
comment
Когда вы говорите, что удалили часть ${basedir}, я полагаю, вы также удалили ведущий / и оставили только «src/main/resources»?   -  person Sxilderik    schedule 05.04.2019
comment
у вас нет дополнительной информации о сообщении об ошибке?   -  person lpinto.eu    schedule 05.04.2019
comment
@Sxilderik да, это правильно, я пробовал работать только с src/main/resources'   -  person robbie70    schedule 05.04.2019
comment
@lpinto.eu Я попытался включить трассировку отладки, а затем получить ясное сообщение об исключении FileNotFound - он не может найти мой файл config.properties, потому что он удалил бит src/main/resources из пути .... Я не понять, чем это вызвано.   -  person robbie70    schedule 05.04.2019
comment
Возможно, актуально.   -  person chrylis -cautiouslyoptimistic-    schedule 05.04.2019
comment
В вашем корневом проекте нет папки профилей. И хотя maven ожидает его, поскольку вы указали его в разделе фильтров.   -  person Sxilderik    schedule 05.04.2019
comment
@Sxilderik спасибо - вы предлагаете мне переместить каталог profiles/ в корень проекта? Я надеялся избежать этого, так как это не казалось правильным подходом - это правильный подход? В разделе ресурсов я указал расположение ресурсов, но по какой-то причине он не подбирает это.   -  person robbie70    schedule 05.04.2019
comment
@ robbie70, да, вы должны переместить папку, и это правильный подход. Смотрите обновление в моем ответе.   -  person lpinto.eu    schedule 05.04.2019


Ответы (1)


Элемент filter (ссылка) проанализирует ваши файлы и применит к ним фильтр содержимого. . Элемент profiles (ссылка) помогает определить различные среды для сборка.

Все это как сделать с вашими ресурсами. Это могут быть файлы конфигурации или файлы другого типа. Если вы фильтруете, вы можете изменить содержимое этих файлов с другими значениями - например. свойства пом. При использовании профилей вы можете иметь разные свойства замены для каждой среды.

Вы должны переместить профили вверх по дереву для пути по умолчанию или добавить конфигурацию в свой pom для расположения ресурса. base dir - это папка, содержащая ваш файл pom. У вас должна быть папка вашего профиля здесь.

Мой собственный пример

Кроме того, здесь — полезная информация о профилях и их конфигурациях.

person lpinto.eu    schedule 05.04.2019
comment
@ Ipinto.eu спасибо - я проверю это. Та ссылка, которую вы разместили, является той, по которой я следил! :) - person robbie70; 05.04.2019
comment
Такой же я использовал. Просто переместите папку профилей, как показано в моем проекте. Если это помогло, пожалуйста, проголосуйте за мой ответ или примите его. - person lpinto.eu; 05.04.2019
comment
@ Ipinto.eu спасибо, что сработало! :) интересно, что моя оригинальная версия также заработала, добавив src/main/resources в мой тег фильтра следующим образом: ‹filter›${basedir}/src/main/resources/profiles/${build.profile.id}/config .properties‹/filter›, но из того, что вы говорите, стандартный подход состоит в том, чтобы иметь каталог профилей вне основного каталога проекта, а не в каталоге ресурсов - в этом случае мне не ясно, какой эффект имеет тег ресурсов? Я приму ваш ответ как ответ. - person robbie70; 05.04.2019
comment
ресурсы не являются файлами исходного кода, которые вы хотите добавить в свой проект - например. конфигурации, переводы... профили, которые вы будете использовать для настройки ресурсов, и поэтому, чтобы отличить их, вы храните их в другом месте. - person lpinto.eu; 08.04.2019