尝试更好地解释:
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>
答案 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
命令行选项来完成。