gpt4 book ai didi

maven-2 - maven antrun 插件内的父属性

转载 作者:行者123 更新时间:2023-12-02 17:17:35 24 4
gpt4 key购买 nike

有一个多模块项目。在 child 内部,我需要做一些复杂的事情(集成测试与部署到应用程序服务器等)。所以有一个集成测试子模块,从这个模块我需要父模块的根才能到达其他模块。我不想使用“..”。 Integrationtest POM中有一个属性:

<properties>
<main.basedir>${project.parent.basedir}</main.basedir>
...
</properties>

还有一个antrun插件,内容如下:

<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<id>render-parameter-sql</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echoproperties/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>

在输出中,main.basedir 未解析:

main:
[echoproperties] #Ant properties
[echoproperties] #Thu Oct 28 09:32:13 CEST 2010
[echoproperties] ant.core.lib=C\:\\Users\\gaborl\\.m2\\repository\\org\\apache\\ant\\ant\\1.8.1\\ant-1.8.1.jar
...
[echoproperties] main.basedir=${project.parent.basedir}
[echoproperties] maven.dependency.antlr.antlr.jar.path=C\:\\Users\\gaborl\\.m2\\repository\\antlr\\antlr\\2.7.6\\antlr-2.7.6.jar

在变得非常生气之后,我决定问你如何解决这个问题......

最佳答案

我不知道确切为什么 ${project.parent.basedir} 在 AntRun 中不“可用”,也许只是不支持(参见 http://jira.codehaus.org/browse/MNG-3597 ) .

这是使用 gmaven 的一个可怕的解决方法:

<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.3</version>
<executions>
<execution>
<id>set-custom-property</id>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
project.properties.setProperty('main.basedir', project.parent.basedir.toString())
</source>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>render-parameter-sql</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo>project.artifactId : ${project.artifactId}</echo>
<echo>project.parent.basedir : ${project.parent.basedir}</echo>
<echo>main.basedir : ${main.basedir}</echo>
<echo>project.basedir : ${project.basedir}</echo>
<echo>project.build.directory : ${project.build.directory}</echo>
</target>
</configuration>
</execution>
</executions>
</plugin>

我并不为此感到自豪,但它有点“有效”(如果父 basedir 路径的字符串表示形式适合您):

$ mvn validate[INFO] Scanning for projects......[INFO] --- maven-antrun-plugin:1.6:run (render-parameter-sql) @ Q4040778 ---[INFO] Executing tasksmain:     [echo] project.artifactId        : Q4040778     [echo] project.parent.basedir    : ${project.parent.basedir}     [echo] main.basedir              : /home/pascal/Projects/stackoverflow     [echo] project.basedir           : /home/pascal/Projects/stackoverflow/Q4040778     [echo] project.build.directory   : /home/pascal/Projects/stackoverflow/Q4040778/target[INFO] Executed tasks...

但我需要说的是,你想要做的事情(从这个模块我需要父级的根才能到达其他模块)是一种不好的做法,模块应该是独立的并且不是紧密耦合的。

我不建议使用我发布的内容:)

关于maven-2 - maven antrun 插件内的父属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4040778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com