У меня есть html-файл, который загружает апплет. Html должен ссылаться на jar по имени, и поскольку maven называет его на основе artifactid, версии и т. Д., Html нуждается в динамическом обновлении по мере развития проекта. Похоже, что фильтрация ресурсов - это путь, но я не могу понять, как должна выглядеть переменная для интерполяции. Мне бы хотелось что-то вроде строки $ {project.dependencies.myartifactid.version}, но это, похоже, не вариант, и у меня была горькая удача.Переменные проекта Maven для зависимостей
ответ
Вам понадобится что-то вроде ${project.dependencies[0].artifactId}
где 0
- это индекс зависимости апплета в вашем военном модуле (см. PLXUTILS-37). И действительно, использование фильтрации ресурсов должно работать.
Обновление: Похоже, что есть ошибка в Плагине ресурсов Maven, это свойство не фильтруется, как указано в this question. Возможно, вам придется использовать обходное решение, предложенное в this answer.
От http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide:
${project.build.finalName}
относится к заключительному имени созданного файла, когда встроенный проект упаковывается
Другого варианта у вас есть, чтобы изменить набор ${project.build.finalName}
на статическую строку в вашем POM:
<build>
<finalName>foo</finalName>
</build>
Да, но апплет очень вероятен в банке, от которой зависит война, и это не даст вам название фляги для апплета. –
Не понимал, что JAR является зависимостью. Тогда да, это не поможет. –
Насколько я понимаю, вы пытаетесь сохранить версию в актуальном состоянии, ожидая, что остальное останется неизменным. Есть две альтернативы.
Первый заключается в том, чтобы удалить версию из имени, чтобы 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 и все равно только изменить его в одном месте.
Бинго! Не нашел никаких указаний на то, что вы можете индексировать переменные таким образом. Спасибо, сэр.(Теперь, если бы я мог идентифицировать его по имени, а не по индексу. О, ну, это, безусловно, будет работать.) –
@Erik Да, он будет хрупким (например, добавление зависимости может сломать все, чтобы это нужно было документировать), но, к сожалению, , Я не думаю, что есть что-то лучше. –
на самом деле это работает только до версии maven antrun plugin версии 1.3. Начиная с 1.4 onward $ {project.dependencies [0] .artifactId} больше не интерполируется. – JayZee