maven-war-plugin maven-compiler-plugin

时间:2014-07-08 22:04:21

标签: maven plugins war

我是maven的新手;我需要在两个不同的目录中编译和打包2个war文件,即使源是相同的(只更改web.xml文件)。

尝试更好地解释:

LT的目录结构:

 <DIR>          LT1_war
  <DIR>          LT_war
                 pom.xml

pom的一部分是:

<modules>
        <module>LT_war</module>
        <module>LT1_war</module>
</modules>


inside the folder LT_war there is a pom and src-->main-->java
                                                         resources
                                                         webapp

这个编译成功了,我也打包了一个战争LT_war(部署到tomcat)

我需要一种方法来编译目录LT1_war(使用LT_war目录中的源代码)并使用LT_war目录中的webapp打包(只需更改web.xml文件)

我试着在LT1_war目录中写下pom,但是当我在mvn打包时我告诉我:

[INFO] lt ................................................ SUCCESS [3.995s]
[INFO] LT ................................................ SUCCESS [1:12.629s]
[INFO] LT1 ............................................... FAILURE [41.367s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1:59.716s
[INFO] Finished at: Tue Jul 08 23:50:43 CEST 2014
[INFO] Final Memory: 20M/200M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.0:war (default-war) on project LT1: Error assembling WAR: Deployment descriptor: D:\attivi
taTomcat7\LT\LT1_war\target\LT1\WEB-INF\web.xml does not exist. -> [Help 1]:

这是LT1_war中的pom文件的一部分:

<build>
    <finalName>LT1</finalName>
    <resources>
        <resource>
            <directory>../LT_war/src/</directory>
        </resource>
    </resources>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.0</version>
            <configuration>
                <excludes>**/.svn/**</excludes>
            </configuration>
            <executions>
                <execution>
                    <id>exploded</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>exploded</goal>
                    </goals>
                </execution>
                <execution>
                    <id>war</id>
                    <phase>package</phase>
                    <goals>
                        <goal>war</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2 个答案:

答案 0 :(得分:3)

有些事情我认为你正在做的事情非常错误:

  • Maven项目应永远访问其自身模块文件夹之外的文件。所以LT1请远离LT的文件夹!

  • 尽可能减少WAR项目。无论如何模块化您的代码,并使WAR仅依赖于包含实际肉类的JAR文件

  • 通过让两个WAR文件都依赖于您移入此类JAR文件的代码,可以更好地修复一个WAR文件“借用”其他WAR中的内容

  • 如果你能合理地停止使用Java 5;它自2009年以来一直是EOL。另外,考虑将您的源/目标级别移动到父项目,因此您不需要重新定义相同的,但具有一致的Java版本

  • 谈到旧版本,你怎么还有你需要排除的.svn个文件夹(暂时你的Subversion工作区的根目录中只有一个.svn文件夹,这不会影响Maven WAR插件)

所以你的项目结构可能如下所示:

ROOT
   MEAT (packaging JAR, where your classes live)
   LT (packaging WAR, depends on MEAT)
   LT1 (packaging WAR, depends on MEAT, and stays the heck out of LT)

添加(忘记某些方面,如评论中所指出的)......

虽然MEAT是打包JAR的,但是你希望它还包含你进入webapp的东西而不会在类路径上结束。如果您使用的是最近的servlet-api,可以通过为MEAT提供资源文件夹来实现,如下所示:

src/main/resources/META-INF/resources/...

E.g。 .../META-INF/resources/flower.jpeg将在部署的WAR中显示为<context root>/flower.jpg(而不是仅添加到Java类路径中)。

答案 1 :(得分:0)

  

我需要一种方法来编译目录LT1_war(使用LT_war目录中的源)并使用LT_war目录中的webapp打包(只需更改web.xml文件)

通常,您从根目录进行编译。执行您要求执行的操作并不方便,但可以使用--also-make命令行选项来完成。