为啥 Intellij-IDEA 会忽略我的 tomcat/conf/server.xml 上下文标签?

Posted

技术标签:

【中文标题】为啥 Intellij-IDEA 会忽略我的 tomcat/conf/server.xml 上下文标签?【英文标题】:Why does Intellij-IDEA ignore my tomcat/conf/server.xml Context tag?为什么 Intellij-IDEA 会忽略我的 tomcat/conf/server.xml 上下文标签? 【发布时间】:2012-12-30 06:08:40 【问题描述】:

在我的 $TOMCAT_HOME/conf/server.xml 我把它放在底部附近:

...

 <Context path="/staticdir" docBase="/filesystem/path/to/static/dir"/>                                

      </Host>
    </Engine>
  </Service>
</Server>

我这样做是因为我的文件系统上有文件,当您转到 localhost:8080/staticdir 时,我希望 tomcat 提供这些文件

但是当我在 Intellij-IDEA 中启动应用程序时,tomcat 日志显示:

使用 CATALINA_BASE:“C:\Users\me.IntelliJIdea11\system\tomcat\Unnamed_Product_2”

如果我进入我的文件系统上的那个目录并查看 conf/server.xml 文件,它没有我放在那里的 Context 标签。为什么 intellij 会修改它,我该如何防止它?

我觉得我应该对我的 $TOMCAT_HOME/conf/context.xml 文件进行此更改,但我无法找到如何在其中进行此更改的示例。如果有人可以给我看一个例子,我会认为这是一个答案,因为我注意到 intellij 不会修改该文件。


我找到了解决方法。

但我真的不喜欢这样,因为当新用户第一次尝试运行该应用程序时,我无法想象一种方法来检测他们是否错误地执行了这一步。

这是我的tomcat配置的图片:

【问题讨论】:

我认为您的方法没有太大的不同。在第一种情况下,您的新用户必须对 Tomcat 进行特殊配置,并且他拥有所需的信息。在第二种情况下,他必须了解有关 IntelliJ 特殊配置的信息。在这两种情况下,如果他不这样做,他都会收到相同的错误消息。如果您不需要重用它,我会将静态内容放入您的 web 应用程序中。 静态内容是在应用运行时生成的。我想这不是静态的,它是“静态的”。另外,我对其进行了设置,以便有一个指向 server.xml 的属性文件。如果该属性或道具文件丢失,它会给出一个很好的错误,说明它们需要存在。一旦它存在,它就会扫描你指向它的 server.xml,以确保你的设置正确。 Intellij 搞砸了,因为它不使用 server.xml。如何让应用出错来解释如何设置? 我的意思是,“Intellij 搞砸了,因为它使用自己的 server.xml 并且配置它与非 Intellij 设置不同” 您可以选择在运行配置中覆盖CATALINA_BASE 并使用默认配置,您应该配置为使用工件输出位置作为部署源或更改工件输出以将目录转到@ 987654330@. 在***.com/a/7702077/104891 和this screenshot 上查看我对CATALINA_BASE 覆盖的回答。 【参考方案1】:

在“启动/连接”选项卡中添加如下“传递环境变量”部分中提到的数据。重启就好了。

Name           Value
------------   -----
CATLINA_BASE   Tomcat Installation directory

【讨论】:

不是 catalina_base 和 catalina_home 应该是两个不同的东西吗?我认为 base 有一些您可能不想保存的临时更改【参考方案2】:

我复制了服务器,发现我的日志文件存放在错误的位置。

所以对于“Tomcat prod”,它实际上使用的是catalina.base=".../preprod/..."

我最终编辑了projects/.idea/workspace.xml,它就在我安装 IntelliJ 的位置旁边

【讨论】:

【参考方案3】:

我在 Tomcat/IntelliJ 中需要 ROOT 上下文,所以在 host 标签的 server.xml 中,添加特定的上下文:

<Context path="" docBase="C:\intranet\app\tomcat\webapps\ROOT\" reloadable="true" />

在 IntelliJ 11.1.5 中,在服务器选项卡面板中的“部署在 Tomcat 实例中配置的应用程序”复选框中,IntelliJ 会将 server.xml 复制到文件夹部署中:

C:\Users\Username\.IntelliJIdea11\system\tomcat\Unnamed_Product_2\conf"

现在我可以访问根域中的资源,例如 crossdomain.xml :

http://localhost:8080/crossdomain.xml

【讨论】:

【参考方案4】:

默认情况下,IntelliJ IDEA 会修改 CATALINA_BASE 环境,以便 Tomcat 使用调整后的配置文件直接从工件输出位置部署应用程序,但是可以使用 override this behavior 并手动配置所有内容(通过将工件输出更改为webapps 或通过以与 IDEA 相同的方式更改服务器配置,以便从标准工件输出进行部署)。

【讨论】:

非常感谢您的提示!这正是我所需要的。我选择了“覆盖”方法并将我的 CATALINA_BASE 设置为我需要的位置。 使用自定义 catalina_base 代替 Intellij 在未指定时使用的默认值是否有任何副作用? 所以你的 catalina_base 值与 catalina_home 相同?

以上是关于为啥 Intellij-IDEA 会忽略我的 tomcat/conf/server.xml 上下文标签?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我在 SwiftUI 中的 TextEditor 会忽略我的 .keyboardType?

为啥我的服务器会忽略来自 ajax 请求的身份验证标头?

为啥当我使用 JSON.NET 反序列化时会忽略我的默认值?

为啥Java忽略我的serialVersionUID?

为啥 Javascript 会忽略单行 HTML 注释?

为啥 Chrome 会忽略 IE 条件标签?