Java 依赖项的Maven项目变量

Java 依赖项的Maven项目变量,java,maven-2,filtering,resources,Java,Maven 2,Filtering,Resources,我有一个加载小程序的html文件。html需要按名称引用jar,因为maven根据artifactid、版本等对其进行命名,所以html需要随着项目的发展而动态更新。看起来资源过滤是一种方法,但我不知道要插值的变量应该是什么样子。我想要一些类似${project.dependencies.myartifactid.version}的东西,但这似乎不是一个选项,我在谷歌搜索时运气不佳。 ${project.build.finalName}这是默认定义为${project.artifactId}-$

我有一个加载小程序的html文件。html需要按名称引用jar,因为maven根据artifactid、版本等对其进行命名,所以html需要随着项目的发展而动态更新。看起来资源过滤是一种方法,但我不知道要插值的变量应该是什么样子。我想要一些类似${project.dependencies.myartifactid.version}的东西,但这似乎不是一个选项,我在谷歌搜索时运气不佳。

${project.build.finalName}
这是默认定义为${project.artifactId}-${project.version}

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

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

您需要类似于
${project.dependencies[0].artifactId}
的内容,其中
0
是war模块中小程序的依赖项索引(请参阅)。事实上,使用资源过滤应该是可行的


更新:Maven Resources插件中似乎存在缺陷,此属性未按中所述进行筛选。您可能必须使用中建议的解决方法

据我所知,您正在努力使版本保持最新,同时希望其余版本保持不变。有两种选择

第一个是从名称中删除版本,这样HTML就不需要更改。您可以在此处搜索
archiva applet
查看一个实际示例:

在本例中,由于您无论如何都不希望小程序出现在
WEB-INF/classes
中,因此webapp中会忽略它,然后通过依赖插件将其包括在内:

<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>


我的团队
my.applet
${applet.version}


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

是的,但小程序很可能位于war依赖的jar中,这不会给您小程序的jar名称。没有意识到jar是一个依赖项。那是的,这没用,宾果!没有发现任何迹象表明可以通过这种方式索引变量。谢谢你,先生。(现在如果我能通过名称而不是索引来识别它就好了。哦,好吧,这肯定会起作用。)@Erik是的,它会很脆弱(例如,添加依赖项可能会破坏一切,因此需要记录),但遗憾的是,我不认为有更好的方法。事实上,这只有在maven antrun插件版本1.3之前才能起作用。从1.4开始${project.dependencies[0].artifactId}不再插值。
<properties>
  <applet.version>1.2.3</applet.version>
</properties>
<dependency>
  <groupId>my.group</groupId>
  <artifactId>my.applet</artifactId>
  <version>${applet.version}</version>
</dependency>