2012-05-23 149 views
0

我正在使用maven 2.2.1版本作爲我的Java應用程序的構建工具。Maven:指定目錄路徑來選擇文件並部署

有了這個Maven的工具,我建立在某些目錄中的war文件並將其複製到服務器(Tomcat)的

這是通過這些線以下

<copy file="D:/MyProject/target/Test.war" 
tofile="C:/Softwares/apache-tomcat-6.0.33/webapps/Test.war" /> 

這一切工作正常。

在這裏我的問題是,而不是硬編碼目錄的目錄路徑,我可以指定其他地方?

我已經看到這些project.build.directory爲src目錄和project.build.outputDirectory爲目標目錄,我們可以在文件中指定此屬性名稱?

請指導我,在此先感謝。

回答

1

對於戰爭的路徑,你可以使用內置的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文件中。該屬性將放入配置文件中,該配置文件可以默認爲活動狀態。有關說明,請參見this page

一旦你有你deploy.path變量設置,更改複印聲明是這樣的:

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

+0

感謝Shane,如上所述我將使用deploy.path作爲目標目錄,我們如何指定源目錄?因爲如果我回聲project.build.directory它的null,那麼是否有指定源目錄的任何屬性? – Pawan

+0

project.build.directory,project.build.finalName,project.packaging和其他各種屬性應該自動定義。有關完整列表,請參閱http://www.sonatype.com/books/mvnref-book/reference/resource-filtering-sect-properties.html。看到我的編輯上面的故障排除... – Shane

+0

我已經在評論中找到了我的問題的答案(我們應該使用source.path)。感謝謝恩給我的出發點。 – Pawan