依赖项的Maven项目变量

时间:2010-02-10 02:57:06

标签: java maven-2 filtering resources

我有一个加载applet的html文件。 html需要按名称引用jar,并且由于maven根据artifactid,version等命名它,html需要随着项目的发展而动态更新。似乎资源过滤是可行的方法,但我无法弄清楚要插入的变量应该是什么样子。我想要一些类似于$ {project.dependencies.myartifactid.version}的内容,但这似乎不是一种选择,而且我有可怕的运气谷歌搜索。

3 个答案:

答案 0 :(得分:6)

您需要${project.dependencies[0].artifactId}之类的内容,其中0是war模块中applet依赖关系的索引(请参阅PLXUTILS-37)。事实上,使用资源过滤应该可行。

更新:Maven资源插件中似乎存在错误,此属性未按照this question中的说明进行过滤。您可能必须使用this answer中建议的变通方法。

答案 1 :(得分:3)

据我所知,你试图让版本保持最新,同时期望其余部分保持不变。有两种选择。

首先是从名称中删除版本,以便不需要更改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中的applet,它会从webapp中省略,然后通过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>

...

然后,您可以在HTML中使用${applet.version},但仍然只需在一个位置进行更改。

答案 2 :(得分:-1)

来自http://docs.codehaus.org/display/MAVENUSER/MavenPropertiesGuide

  

${project.build.finalName}指的是打包构建项目时创建的文件的最终名称

您拥有的另一个选项是将集合${project.build.finalName}更改为POM中的静态字符串:

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