为什么不使用/作为Maven Tomcat中的上下文路径? [英] Why not to use / as a context path in maven tomcat?

查看:98
本文介绍了为什么不使用/作为Maven Tomcat中的上下文路径?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用maven tomcat插件来部署应用程序.如果我将路径设置为<path>/<path>,它确实会在根上下文中部署,但是我想知道它是否会引起任何问题,因为请勿使用/".

相关问题:如何在使用Maven时在Tomcat 7.0中将上下文路径设置为root("/")

为什么不将/用作Maven Tomcat中的路径?

解决方案

在此提交中引入了指向请勿使用/"的JavaDoc:

(MTOMCAT-102)添加一个mojo来构建一个独立的jar来运行一个Web应用程序:使用路径字段将webapp存储为比projet.build.finalName

更漂亮的名称

向下滚动提交时,您会看到path属性值用于创建JarArchiveEntry:

os.putArchiveEntry( new JarArchiveEntry( path + ".war" ) );

已配置<path>/<path>

会转换为文件名"/.war",看起来有点无效.另一方面,提取时可能会产生".war"文件名.

今天,对于2.2版,此代码段似乎已针对错误 MTOMCAT-103进行了更改:

os.putArchiveEntry( 
    new JarArchiveEntry( 
        StringUtils.removeStart( path, "/" ) + ".war" 
    ) 
);

配置为<path>/<path>

会转换为".war",因为文件名看起来更合法,但仍然不是真正希望的恕我直言.

Tomcat 7文档指出了空上下文路径的基本文件名 (又名"/")应为ROOT,最好的选择是选择<path>ROOT<path>以获得理想的结果.

为了重现此内容,我签出了 tomcat-maven-plugin.git ,并使用

然后从文件夹/tomcat-maven-plugin/tomcat7-maven-plugin/src/it/simple-war-exec-project中执行:

$ mvn clean package
...
[INFO] BUILD SUCCESS
...
$ cd target/
$ java -jar simple-war-exec-project-1.0-SNAPSHOT-war-exec.jar
...
INFORMATION: Deploying web application archive C:\Temp\tomcat-maven-plugin\tomcat7-maven-plugin\src\it\simple-war-exec-project\target\.extract\webapps\ROOT.war
...

结果:

I'm using maven tomcat plugin to deploy an app. It does deploy in root context if I set path to <path>/<path> but I want to know if it causes any problems because the docs explicitly says "Do not use /".

Related question: How to set context path to root("/") in Tomcat 7.0 when using Maven

Why not to use / as path in maven tomcat?

解决方案

The JavaDoc pointing out to "Do not use /" was introduced in this commit:

(MTOMCAT-102) Add a mojo to build a standalone jar to run a web application: use path field to store webapp to have a more nice name than projet.build.finalName

When scrolling down the commit you see that the path property value is used to create a JarArchiveEntry:

os.putArchiveEntry( new JarArchiveEntry( path + ".war" ) );

which for configured <path>/<path> would translate to a file name of "/.war" looking kind of invalid. On the other this would possibly yield to ".war" file name when extracted.

Today for version 2.2 this piece of code looks like this changed for bug MTOMCAT-103:

os.putArchiveEntry( 
    new JarArchiveEntry( 
        StringUtils.removeStart( path, "/" ) + ".war" 
    ) 
);

which for configured <path>/<path> would translate to ".war" as file name looking way more legal but still not really desirable imho.

As the Tomcat 7 Documentation states the base file name for the empty context path (aka "/") should be ROOT your best bet is to choose <path>ROOT<path> to achieve the desired result.

Edit:

For reproducing this, I checked out tomcat-maven-plugin.git and used their integration test. I had some truble to get a functional build at all, bit after removing some stuff from their server.xml and changing tomcat7-maven-plugin version to 2.1 it worked:

This is the diff applyied to their integration test app:

diff --git a/tomcat7-maven-plugin/src/it/simple-war-exec-project/pom.xml b/tomcat7-maven-plugin/src/it/simple-war-exec-project/pom.xml
index 8ce51b7..e00f0ea 100644
--- a/tomcat7-maven-plugin/src/it/simple-war-exec-project/pom.xml
+++ b/tomcat7-maven-plugin/src/it/simple-war-exec-project/pom.xml
@@ -42,7 +42,7 @@
         <plugin>
           <groupId>org.apache.tomcat.maven</groupId>
           <artifactId>tomcat7-maven-plugin</artifactId>
-          <version>@pom.version@</version>
+          <version>2.1</version>
         </plugin>
       </plugins>
     </pluginManagement>
@@ -65,7 +65,7 @@
             </goals>
             <phase>package</phase>
             <configuration>
-              <path>foo</path>
+              <path>ROOT</path>
               <serverXml>src/main/tomcatconf/server.xml</serverXml>
             </configuration>
           </execution>
diff --git a/tomcat7-maven-plugin/src/it/simple-war-exec-project/src/main/tomcatconf/server.xml b/tomcat7-maven-plugin/src/it/simple-war-exec-project/src/main/tomcatconf/server.xml
index 76ab562..de086fc 100644
--- a/tomcat7-maven-plugin/src/it/simple-war-exec-project/src/main/tomcatconf/server.xml
+++ b/tomcat7-maven-plugin/src/it/simple-war-exec-project/src/main/tomcatconf/server.xml
@@ -19,14 +19,7 @@

 <Server port="8010" shutdown="SHUTDOWN">

-  <GlobalNamingResources>
-    <!-- Used by Manager webapp -->
-    <Resource name="UserDatabase" auth="Container"
-              type="org.apache.catalina.UserDatabase"
-       description="User database that can be updated and saved"
-           factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
-          pathname="conf/tomcat-users.xml" />
-  </GlobalNamingResources>
+  

   <Service name="Catalina">
     <Connector port="8080" keepAliveTimeout="1800000" maxKeepAliveRequests="30000" maxThreads="300" />
@@ -34,8 +27,6 @@
     <Engine name="Catalina" defaultHost="localhost">
       <Valve className="org.apache.catalina.valves.AccessLogValve" 
              resolveHosts="false" pattern="%t-ip:%a-protocol:%H-localPort:%p-path:%U-time:%D ms"/> 
-      <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
-             resourceName="UserDatabase" />
       <Host name="localhost" appBase="webapps" />
     </Engine>

Then from within the folder /tomcat-maven-plugin/tomcat7-maven-plugin/src/it/simple-war-exec-project I did:

$ mvn clean package
...
[INFO] BUILD SUCCESS
...
$ cd target/
$ java -jar simple-war-exec-project-1.0-SNAPSHOT-war-exec.jar
...
INFORMATION: Deploying web application archive C:\Temp\tomcat-maven-plugin\tomcat7-maven-plugin\src\it\simple-war-exec-project\target\.extract\webapps\ROOT.war
...

And the result:

这篇关于为什么不使用/作为Maven Tomcat中的上下文路径?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆