1

使用 tomee-maven-plugin 部署 web 应用程序时,应用程序托管的有效 URL 结果为:

http://localhost:8080/[artifactId]-[version]/

我想任意设置该相对路径,例如:

http://localhost:8080/myservice/

tomee-maven-plugin 中的哪个配置参数可以做到这一点?

感谢您的快速帮助和最好的问候

帕斯卡

4

2 回答 2

4

您可能会获得该上下文路径,因为它是 warfile 工件的名称。

您可以finalName在 pomfile 中设置:

 <build>
     <finalName>myservice</finalName>
     [ all other configuration ... ]
 </build>

这将产生一个myservice.war文件。如果您只想使用不同的上下文路径而没有不同命名的工件,您可以在插件配置中指定它

<plugin>
  <groupId>org.apache.openejb.maven</groupId>
  <artifactId>tomee-maven-plugin</artifactId>
  <version>1.0.1</version>
  <configuration>
    <finalName>myservice</finalName>
    <warFile>point this to your warfile</warFile>
  </configuration>
</plugin>

或者,您可以尝试将 a 添加META-INF/context.xml到您的工件中,其中包含:

<Context path="/myservice" />
于 2013-06-07T15:13:29.250 回答
3

Guido 的虚假回答(有 3 个赞成票!)浪费了我很多时间。它充满了不好的建议。

回应 Guido 的三条建议:

  • “在标签中设置战争文件名<build>”——这不是一个好建议。您丢失了您的工件的版本信息,并且重命名您的战争以使部署插件满意,这完全是bass-ackwards。
  • <finalName>标签”——这要么是过时的信息,要么是公然的错误信息。无论哪种方式,它 - 以及插件文档的缺乏 - 花费了我大量的时间。真正的答案见下文。
  • “在我们的工件中创建一个META-INF/context.xml” - 这在技术上是正确的,但半无用的建议。根据Tomcat/Tomee的apache 文档:

当主机执行操作autoDeploydeployOnStartup操作时,Web 应用程序的名称和上下文路径源自定义 Web 应用程序的文件的名称。因此,上下文路径可能不会META-INF/context.xml

如果 Guido 删除他的答案,以上所有内容都可以删除。

要在 tomee-maven-plugin 中指定 Web 应用程序的上下文路径:

<configuration>
...
    <context>${artifactId}</context>
...
</configuration>

例如,这将部署myapp-1.0.0-SNAPSHOT/myapp.

此外,当我在咆哮时,我不妨让世界变得更美好并添加我学到的其他内容,因为tomee-maven-plugin 的主页几乎不包含有关可用配置选项的信息......

  • 尝试使用 运行-X,它会打印出当前 XML 配置的 XML 块。(例如“mvn tomee:run -X并寻找<configuration>”)。
  • 如果您要从 过渡tomcat-maven-plugintomee-maven-plugin,则不能使用任何现有配置。把它扔掉。
  • tomee-maven-plugin 的作者仅在随机博客文章中提供文档,因此如果您有问题或更好地浏览所有 OpenEJB 源代码,请查看那里。呃……
  • 如果您使用的是 SSL 证书,那么关于启动和运行所需的信息也很少:

首先,有一个未记录的“类路径”标签可能对您有用:

<classpaths>
    <classpath>${someClasspath}</classpath>
</classpaths>

其次,您可以使用一个未记录的systemVariables标签(或者您可以使用<args>)来指定您的密钥库和信任库。它在下面看起来很明显,但实际上没有其他地方告诉你 tomee-maven-plugin 期望什么,并且还有相当多的错误信息(例如,conf 中的任何 JKS 都将被自动加载),所以这就是实际工作的方法:

<systemVariables>
    <javax.net.ssl.trustStore>${some.path}/truststore.jks</javax.net.ssl.trustStore>
    <javax.net.ssl.trustStorePassword>somePassword</javax.net.ssl.trustStorePassword>
    <javax.net.ssl.keyStore>${some.path}/keystore.pkcs12</javax.net.ssl.Store>
    <javax.net.ssl.keyStorePassword>somePassword</javax.net.ssl.keyStorePassword>
    <javax.net.ssl.keyStoreType>someType (e.g. PKCS12)</javax.net.ssl.keyStoreType>
</systemVariables>

希望有一天这对某人有所帮助。:-)

于 2016-01-08T17:30:35.713 回答