【问题标题】:src/main/webapp directory not recognized by EclipseEclipse 无法识别 src/main/webapp 目录
【发布时间】:2010-12-12 07:47:22
【问题描述】:

我使用 m2eclipse 在 Eclipse 中导入 Maven Java 项目。

它无法将src/main/webapp 识别为源目录。

在包资源管理器中以图形方式显示(或者当我在项目属性中查看 Java-Build-Path 时),
此目录不在源文件夹列表中(而 src/main/javasrc/main/resources 有)。

要访问它,我必须直接查看 src/ 目录,然后开始展开... 不太方便!

但是,如果我运行 maven install,资源将复制到正确的目录。
(例如:src/main/webapp/index.jsptarget/mywar/index.jsp

问题

  1. 这是正确的行为吗? (我在想它可以被视为其他资源......)
  2. 我可以解决它吗?
  3. 我想知道这种情况是否还有其他我现在不知道的缺点?

【问题讨论】:

    标签: java maven-2 directory-structure m2eclipse


    【解决方案1】:

    许多答案声称将src/main/webapp 作为源文件夹是没有意义的,因为 JSP 文件是由容器编译的,而不是在构建周期中的 Maven。

    但是,当您进行安全测试时,它确实有意义

    一些安全扫描工具提供了可以集成到 IDE 中的插件,以便开发团队可以在本地扫描他们的代码并修复他们机器上的基本漏洞,从而减少安全团队的工作量,从而可以进行更高级的测试。

    Eclipse 排除这个特定目录的事实是一个大问题:这样做,安全工具默认不会将webapp/ 目录包含到扫描过程中,这会导致漏报 (该工具未报告的实际漏洞)。然后,这种行为会导致开发团队认为他们的 JSP 页面(例如)从安全的角度来看是安全的。

    如果安全测试团队不关注开发团队进行的扫描(有时我们甚至无法检查哪些扫描已在本地执行),则产品发布时更有可能存在代码中包含的漏洞webapp/ 文件夹。

    因此,从安全的角度来看,这种行为是没有意义的,声称它确实如此的人漏掉了一些要点。

    无论如何,我通过在package explorer 中单击右键将src/main/webapp/ 文件夹添加到构建路径中解决了这个问题 --> build path --> use as source folder

    【讨论】:

      【解决方案2】:

      一种解决方案是利用 m2e 对 build helper maven 插件的支持,并将 src/main/webapp 声明为附加资源路径。这也使得 eclipse 将保存的资源复制到构建目标文件夹结构中。

              <!-- help eclipse identify the webapp folder as a resource folder: -->
              <plugin>
                  <groupId>org.codehaus.mojo</groupId>
                  <artifactId>build-helper-maven-plugin</artifactId>
                  <version>3.0.0</version>
                  <executions>
                      <execution>
                          <id>add-resource</id>
                          <phase>generate-resources</phase>
                          <goals>
                              <goal>add-resource</goal>
                          </goals>
                          <configuration>
                              <resources>
                                  <resource>
                                      <directory>src/main/webapp</directory>
                                      <targetPath>${project.build.directory}/${project.build.finalName}</targetPath>
                                  </resource>
                              </resources>
                          </configuration>
                      </execution>
                  </executions>
              </plugin>
      

      【讨论】:

        【解决方案3】:

        我发现我面临同样问题的完全不同的原因 - 我不会在包资源管理器中看到 src/main/webapp。

        原来它与 POM 或 Eclipse(使用 SpringSource Suite 3.5.0)能够加载 maven 项目无关。

        问题是在我的 src/main/webapp/Scr​​ipts/ 文件夹中有 .git 和 .gitignore 文件。我怀疑可能是 Eclipse 无法处理以“.”开头的文件名。在 webapp 文件夹中。我在多个项目中测试了这个理论,到目前为止它似乎站稳脚跟。

        我希望这会有所帮助。

        【讨论】:

          【解决方案4】:

          不要将 /src/main/webapp 添加为 java 构建路径中的源文件夹,而是将其添加为要包含在部署程序集中的文件夹:

          MyProject -> 属性 -> 部署程序集:添加“/src/main/webapp”部署到“/”

          【讨论】:

          • 如果您没有Deployment Assembly 子菜单,请转到Project Facets 并添加Dynamic Web Module
          【解决方案5】:

          在我的例子中,Eclipse 无法将 src/main/webapp 识别为 Web Resources 文件夹。我通过以下方式解决了它:

          1. 删除项目
          2. 重启eclipse
          3. 从 SVN 获取 Maven 项目的全新更新。

          【讨论】:

            【解决方案6】:
            1. 这是正确的行为吗? (我在想它可以被视为其他资源......)
            2. 我可以解决它吗?
            3. 我想知道这种情况是否还有其他我现在不知道的缺点?
            1. 是的,对我来说这是正确的行为。
            2. 将 src/main/webapp 作为源文件夹实际上没有意义,它不包含可编译的源文件。
            3. 我不知道。我想这取决于你的期望:)

            也就是说,m2eclipse 做出了贡献,允许在顶层使用特定的“Web 资源”标签使 src/main/webapp 可用,如下所示:

            这可能是您关心的解决方案(不方便折叠)。

            【讨论】:

            • +1 感谢您的贡献。我会检查这个“Web 资源”文件夹,因为我们使用的是 Ganymede。
            • 如何让 eclipse 让 'Web Resources' 引用 'src/main/webapp' 目录?
            • @pascal thivent,图片的链接好像坏了,你能更新一下吗?
            【解决方案7】:

            就内斯特而言,别开玩笑了。它是一个端到端的开发环境,而不仅仅是一个编译器。它旨在作为所有源工件的接口,这些工件有助于从 JSP 构建配置,例如 POM 文件。如果 XML 和 JSP 编辑器不能编译,为什么 Eclipse 还要费心呢? --顺便说一句,超级有用。

            Eclipse 的 maven 插件(反之亦然)非常棒,因为它构建了 .classpath、.project 和其他需要立即开始在 eclipse 中使用 maven 项目的配置。但是,每次生成 eclipse 配置(即 mvn eclipse:eclipse)时,必须手动添加不受支持的目录。这是一个很大的烂摊子。

            这些插件忽略了轻松添加可从 IDE 中查看的新源文件夹的能力,这对我来说是个谜。一个 maven/eclipse 插件项目页面甚至引用了通过切换项目类型和欺骗插件使这些源临时可用的变通方法——当然,您需要立即将其改回或破坏构建。

            他们为什么不创建独立控制 .classpath 中的源声明的能力???

            【讨论】:

              【解决方案8】:

              我能想到一个原因。

              我正在使用 Maven 在 Eclipse 中开发 GWT 项目。在我的配置中,src/main/webapp 目录包含我在开发工作中必须引用的 HTML 和 CSS 文件,即使它们不是“可编译”文件。

              能够直接访问它们而不是潜入 src/ 文件夹是一个加分项。并在 POM 中定义它以便以这种方式进行设置意味着我不必在每次运行 eclipse:eclipse 时手动添加文件夹。

              【讨论】:

                【解决方案9】:

                就 maven 而言,src/main/webapp 不是源文件夹,因为它的内容没有被编译/复制到target/classes,所以从 m2eclipse 的角度来看,这是正确的行为。是否有特殊原因需要将 src/main/webapp 标记为 Eclipse 源文件夹?

                【讨论】:

                • 我认为 src/main/webapp 文件夹旨在包含用于示例的 jsp 文件。这就是为什么它必须被标记为源文件夹。
                • 是的,但是 JSP(通常)在部署后由容器编译,而不是由构建系统编译。
                • 我明白你的意思。关于你的最后一个问题,那也是我的第三个问题! :-)
                【解决方案10】:

                你只需要将 src/main/webapp 标记为 Eclipse src 文件夹:

                右键单击 webapp 文件夹 --> 构建路径 --> 用作源文件夹

                不要认为你可以轻易改变这种行为而没有任何丑陋的黑客,src 标记只是 Eclipse 特定的东西,它用于配置其类路径等。

                【讨论】:

                • 如果就这么简单,那我想知道为什么m2eclipse插件不这样做。这完全符合他对我的责任!
                • 如果我手动执行此操作,那么在另一台机器上再次导入同一个项目时会出现问题...
                • 你说得对,也许 m2eclipse 插件应该足够聪明,可以将 src 的所有子文件夹标记为 eclipse 源文件夹..
                • @Nick 也许不是所有的子文件夹...但是 m2eclipse 足够聪明,可以读取项目的“战争”性质,然后添加适当的构建器和 java 性质。所以了解这个标准目录 src/main/webapp 应该没有问题!
                • 您不想这样做,没有理由将src/main/webapp 添加到源文件夹中。
                猜你喜欢
                • 2014-07-10
                • 2011-11-17
                • 2015-07-21
                • 2014-09-25
                • 2020-07-04
                • 2021-05-20
                • 2018-03-14
                • 1970-01-01
                • 2011-02-11
                相关资源
                最近更新 更多