Переменные проекта Maven для зависимостей - PullRequest
3 голосов
/ 10 февраля 2010

У меня есть HTML-файл, который загружает апплет. HTML должен ссылаться на jar по имени, и так как maven называет его на основе артефакта, версии и т. Д., HTML должен динамически обновляться по мере развития проекта. Кажется, что фильтрация ресурсов - путь, но я не могу понять, как должна выглядеть переменная для интерполяции. Я хотел бы что-то вроде $ {project.dependencies.myartifactid.version}, но это, кажется, не вариант, и мне очень повезло, гуглят.

Ответы [ 3 ]

6 голосов
/ 10 февраля 2010

Вам потребуется что-то вроде ${project.dependencies[0].artifactId}, где 0 - это индекс зависимости апплета в вашем военном модуле (см. PLXUTILS-37 ). И действительно, фильтрация ресурсов должна работать.

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

3 голосов
/ 11 февраля 2010

Насколько я понимаю, вы пытаетесь поддерживать версию в актуальном состоянии, ожидая, что остальное останется прежним. Есть две альтернативы.

Первый - удалить версию из имени, чтобы HTML-код не менялся. Вы можете увидеть практический пример, выполнив поиск archiva-applet здесь: http://svn.apache.org/repos/asf/archiva/tags/archiva-1.3/archiva-modules/archiva-web/archiva-webapp/pom.xml

В этом примере, поскольку вы все равно не хотите, чтобы апплет в WEB-INF/classes, он не включается в веб-приложение, а затем включается через плагин Dependency:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-dependency-plugin</artifactId>
  <version>2.0</version>
  <executions>
    <execution>
      <id>copy</id>
      <phase>process-resources</phase>
      <goals>
        <goal>copy</goal>
      </goals>
      <configuration>
        <artifactItems>
          <artifactItem>
            <groupId>${project.groupId}</groupId>
            <artifactId>archiva-applet</artifactId>
            <version>${project.version}</version>
            <outputDirectory>src/main/webapp</outputDirectory>
            <destFileName>archiva-applet.jar</destFileName>
          </artifactItem>
        </artifactItems>
      </configuration>
    </execution>
  </executions>
</plugin>

Если вы используете Maven 2.1.0+, вы можете использовать фазу prepare-package и скопировать ее прямо в вывод без изменения вашего исходного каталога.

Затем вы ссылаетесь на апплет в HTML с одним именем.

Альтернативное решение, если вы хотите продолжить фильтрацию и сохранить версию, - это использовать общее свойство:

<properties>
  <applet.version>1.2.3</applet.version>
</properties>

...

<dependency>
  <groupId>my.group</groupId>
  <artifactId>my.applet</artifactId>
  <version>${applet.version}</version>
</dependency>

...

После этого вы можете использовать ${applet.version} в HTML, и вам все равно придется изменить его только в одном месте.

0 голосов
/ 10 февраля 2010

С http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide:

${project.build.finalName} относится к окончательному имени файла, созданного при упаковке построенного проекта

Другой вариант, который у вас есть, это изменить набор ${project.build.finalName} на статическую строку в вашем POM:

<build>
    <finalName>foo</finalName>
</build>
...