2010-10-08 136 views
5

我正在開發一個基於Servlet的Java項目,使用Maven將其打包爲一場戰爭。 有沒有一種方法可以將JavaScript(JS)文件與此項目一起使用(當項目在Tomcat服務器上加載時,它們應該在某個URL處可用)。在戰爭中打包Javascript文件?

我環顧四周,但還沒有找到任何工作解決方案。

+0

這是一個類似的問題。 http://stackoverflow.com/questions/8397357/copy-a-file-during-maven-build-phase – 2013-05-01 19:22:12

回答

12

也許更好的解決方案是堅持Maven約定,它指定您的Web應用程序的根目錄是src/main/webapp

所以,如果你把所有的Javascript文件放在src/main/webapp/javascript(或src/main/webapp/js)中,它們將被整合到你的最終戰爭包中。

在Maven WAR插件中,他們給出了一些關於目錄內容的描述(例如參見here)。例如:

|-- pom.xml 
`-- src 
    `-- main 
     |-- java 
     | `-- com 
     |  `-- example 
     |   `-- projects 
     |    `-- SampleAction.java 
     |-- resources 
     | `-- images 
     |  `-- sampleimage.jpg 
     `-- webapp 
      |-- WEB-INF 
      | `-- web.xml 
      |-- index.jsp 
      `-- jsp 
       `-- websource.jsp 

正如你所看到的,你可以在這裏把資源webapp/xxx目錄,如jsp文件。

如cuh所述,如果你的目錄結構不同,你也可以配置Maven WAR插件。

+0

你是對的,我的example-config以某種方式混合外部和隱式資源添加。 'src/main/resources'下的所有內容默認添加到'WEB-INF/classes'文件夾中。所以它會在「戰爭」中增加兩次。 btw maven約定是'src/main/webapp'不是webapps。 – cuh 2010-10-08 14:25:03

+0

@cuh更正。 – romaintaz 2010-10-08 14:33:33

3

可以使用maven-war-plugin並將其配置是這樣的:

<plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.0.2</version> 
     <configuration> 
      <warSourceDirectory>${basedir}/src/main/webapp</warSourceDirectory> 
      <webResources> 
       <resource> 
        <directory>your/path/to/js</directory> 
        <targetPath>js</targetPath> 
       </resource> 
      </webResources> 
     </configuration> 
</plugin> 

here

編輯:你可能不希望包括jsclasses文件夾。

1

將它們放在src/main/webapp下的目錄中。也就是說,假設您使用maven-archetype-webapp原型生成了它。

我目前的應用程序有他們在src /主/ web應用/ JavaScript和訪問他們在這樣的JSP:

<script type="text/javascript" src="javascript/jquery-1.4.2.min.js"></script> 

(在SRC /主/ web應用jsp文件即是)