我正在使用maven 2.2.1版本作为我的Java应用程序的构建工具。
有了这个Maven工具,我正在某个目录中构建战争文件并将其复制到服务器(Tomcat)
这适用于以下这些行
<copy file="D:/MyProject/target/Test.war"
tofile="C:/Softwares/apache-tomcat-6.0.33/webapps/Test.war" />
所有这些都工作正常.
在这里我的问题是,与其硬编码目录路径,我可以在其他地方指定吗?
我已经看到了src目录的这些project.build.directory
和目标目录的project.build.outputDirectory
,我们可以在文件中指定此属性名称吗?
请指导我,提前感谢。
对于战争路径,您可以使用内置的 Maven 属性:
${project.build.directory}/${project.build.finalName}.${project.packaging}
您希望将部署路径设置为自定义 Maven 属性。有几种方法可以做到这一点。一种是直接在pom中设置它,就像这样:
<properties>
<deploy.path>C:/Softwares/apache-tomcat-6.0.33/webapps/Test.war</deploy.path>
</properties>
但是,这仍然是在pom中对路径进行硬编码,只是在变量中。
另一种方法是使用 properties-maven-plugin 来读取属性文件。这会将用户特定的设置排除在 pom 之外,并且可以将属性文件保留在源代码管理之外。但是,这不是首选的Maven做事方式,并且将来的版本可能不再支持此插件。
Maven 执行此操作的方法是将部署路径存储在 ~/.m2/settings.xml 文件中。此属性将位于配置文件中,默认情况下该配置文件可能处于活动状态。有关说明,请参阅此页面。
设置 deploy.path 变量后,将 copy 语句更改为如下所示:
<copy file="${project.build.directory}/${project.build.finalName}.${project.packaging}"
tofile="${deploy.path}" />
编辑:
在一个最小的示例项目中,为我设置了以下属性:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<configuration>
<target>
<echo message="project.build.directory: ${project.build.directory}"/>
<echo message="project.build.finalName: ${project.build.finalName}"/>
<echo message="project.packaging: ${project.packaging}"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
如果没有为您设置这些属性,您可以发布您的pom.xml吗?