我正在尝试让我的Tomcat服务器提供文件。我做了一个非常简单的例子来向你展示什么是错的,即使它很简单,它也不起作用。
我的项目是这样的:
test
|->assets
| |->testB.txt
|->src
| |->main
| | |->webapp
| | | |->WEB-INF
| | | | |->web.xml
| | | |->testA.txt
|-> pom.xml
的pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>test</groupId>
<artifactId>test</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<webResources>
<resource>
<directory>assets/</directory>
</resource>
</webResources>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
</web-app>
如果我执行mvn package tomcat6:run
,我可以访问testA.txt
,但我无法访问testB.txt
,即使我看了&#34; .war& #34;生成,我明白了:
|->testA.txt
|->testB.txt
|->META-INF
|->WEB-INF
| |->web.xml
| |->classes
我无法弄清楚为什么我可以访问其中一个但我无法看到另一个(404错误)......
答案 0 :(得分:3)
您无法访问testB.txt
,因为在运行tomcat6:run
时,Tomcat Maven插件默认情况下会查看webapp
文件夹,而不是生成的war文件(通过package
}}或者target
文件夹中生成的解压缩战争。
这是故意制作的,以便您可以动态创建新资源或更改其内容,并且可以在正在运行的实例上进行更改(热部署)。
您可以通过以下方式验证:
testC.txt
,正在运行的实例testC.txt
,将被忽略testC.txt
,它将可用!默认位置是$ {basedir} / src / main / webapp
您可以通过warSourceDirectory
元素进行配置。在您的情况下,您希望将其指向target
文件夹的内置解压缩战争。因此,您可以按以下方式更改配置:
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat6-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<warSourceDirectory>${project.build.directory}/${project.build.finalName}</warSourceDirectory>
</configuration>
</plugin>
注意:它现在指向通过package
阶段构建的Maven。它会起作用。
答案 1 :(得分:2)
tomcat6:run
没有运行打包的战争,请尝试使用mvn tomcat6:run-war
。