Maven在Eclipse中的更新: 无法更新项目

4

我正在使用m2e遵循这里的Jersey REST的第一步。

在对Tomcat 10和Java-17进行了一些调整后,它在部署到Tomcat 10.1上运行良好。

现在,我想采取下一步行动并将新内容添加到pom.xml中。但是执行Maven / Update Project ...会导致失败消息:

Could not update project HelloREST configuration
Cannot invoke "org.eclipse.wst.common.componentcore.internal.WorkbenchComponent.findResourcesByRuntimePath(org.eclipse.core.runtime.IPath)"
because "aComponent" is null

此外,错误日志还显示了

eclipse.buildId=4.26.0.20221201-1200
java.version=17.0.5
java.vendor=Eclipse Adoptium
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product
Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.jee.product

org.eclipse.m2e.logback.appender
Error
Tue Feb 07 13:19:45 CET 2023
HelloREST/.settings/org.eclipse.wst.common.component is missing or invalid. Skipping module dependency configuration. Deployment issues may arise.

并且

eclipse.buildId=4.26.0.20221201-1200
java.version=17.0.5
java.vendor=Eclipse Adoptium
BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US
Framework arguments:  -product org.eclipse.epp.package.jee.product
Command-line arguments:  -os linux -ws gtk -arch x86_64 -product org.eclipse.epp.package.jee.product

org.eclipse.wst.common.frameworks
Error
Tue Feb 07 13:19:45 CET 2023
Cannot invoke "org.eclipse.wst.common.componentcore.internal.WorkbenchComponent.getProperties()" because "component" is null

java.lang.NullPointerException: Cannot invoke "org.eclipse.wst.common.componentcore.internal.WorkbenchComponent.getProperties()" because "component" is null
    at org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent.setMetaProperty(VirtualComponent.java:285)
    at org.eclipse.wst.common.componentcore.internal.operation.ServerContextRootUpdateOperation.execute(ServerContextRootUpdateOperation.java:40)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl$1.run(DataModelPausibleOperationImpl.java:385)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2380)
    at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2405)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:410)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.runOperation(DataModelPausibleOperationImpl.java:360)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.doExecute(DataModelPausibleOperationImpl.java:247)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.executeImpl(DataModelPausibleOperationImpl.java:219)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.cacheThreadAndContinue(DataModelPausibleOperationImpl.java:89)
    at org.eclipse.wst.common.frameworks.internal.datamodel.DataModelPausibleOperationImpl.execute(DataModelPausibleOperationImpl.java:207)
    at org.eclipse.wst.common.componentcore.internal.util.ComponentUtilities.setServerContextRoot(ComponentUtilities.java:337)
    at org.eclipse.jst.j2ee.internal.project.J2EEProjectUtilities.setServerContextRoot(J2EEProjectUtilities.java:948)
    at org.eclipse.m2e.wtp.WebProjectConfiguratorDelegate.configure(WebProjectConfiguratorDelegate.java:157)
    at org.eclipse.m2e.wtp.AbstractProjectConfiguratorDelegate.configureProject(AbstractProjectConfiguratorDelegate.java:88)
    at org.eclipse.m2e.wtp.WTPProjectConfigurator.configure(WTPProjectConfigurator.java:70)
    at org.eclipse.m2e.core.project.configurator.AbstractLifecycleMapping.configure(AbstractLifecycleMapping.java:123)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$6(ProjectConfigurationManager.java:494)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:364)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:274)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:488)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$4(ProjectConfigurationManager.java:416)
    at java.base/java.util.Collection.removeIf(Collection.java:576)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration0(ProjectConfigurationManager.java:410)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.lambda$3(ProjectConfigurationManager.java:340)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:364)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:274)
    at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:213)
    at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1102)
    at org.eclipse.m2e.core.internal.project.ProjectConfigurationManager.updateProjectConfiguration(ProjectConfigurationManager.java:339)
    at org.eclipse.m2e.core.ui.internal.UpdateMavenProjectJob.runInWorkspace(UpdateMavenProjectJob.java:80)
    at org.eclipse.core.internal.resources.InternalWorkspaceJob.run(InternalWorkspaceJob.java:43)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)

目前我还没有看到其他问题,但它们可能会出现。你有什么想法是什么原因呢?

即使我尝试缩小项目,甚至删除.metadata并重新启动Eclipse,失败消息也不会消失。

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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>net.codejava</groupId>
    <artifactId>HelloREST</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>HelloREST</name>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <release>17</release>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>3.2.3</version>
                <configuration>
                    <warName>HelloREST</warName>
                    <outputDirectory>/opt/tomcat/webapps/</outputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>3.1.1</version>
        </dependency>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>4.0.1</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</project>

嗨,howlger。我编辑了一下:故障与所提到的服务器设置无关。上面的故障文本是错误消息详细视图中的c'np。还有其他错误日志吗? - ngong
窗口 > 显示视图 > 错误日志 (或者 ... > 其他...: 错误日志)。 - howlger
请在您的问题中编辑此信息(请参见我的第一个评论)。您是从头安装Eclipse 2022-12还是升级了现有的安装到Eclipse 2022-12(4.26)? - howlger
我相当确定我已经从头开始安装了Eclipse 2022-12,但并不百分之百确定。 - ngong
1
不同意@howlger的观点。这是由Maven...Update Project触发的,整个教程都是围绕Maven构建的,因此m2e和m2e-wtp是开始的地方。这些是您正在交互的组件,他们将不得不弄清楚是否做错了什么或者这真的是Web工具常见问题。m2e-wtp依赖于WTP,因此您可以从m2e-wtp开始。 - nitind
显示剩余3条评论
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7
以下步骤解决了我的问题:
  1. 从Eclipse项目资源管理器中删除项目,但不要从文件系统中删除。
  2. 在文件系统中删除.settings文件夹。
  3. 再次将项目导入为现有的Maven项目

=====

我进行了更深入的调查。我发现.settings文件夹中有两个原因:

  1. org.eclipse.wst.common.component
  2. org.eclipse.wst.common.project.facet.core.xml

第一个几乎是空的。只有

<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId"/>
第二个包含一行。
 <installed facet="jst.web" version="5.0"/>

删除该行并重新导入项目将其替换为

<installed facet="jst.web" version="2.5"/>

并将第一个文件填满

<?xml version="1.0" encoding="UTF-8"?><project-modules id="moduleCoreId" project-version="1.5.0">
    <wb-module deploy-name="HelloREST">
        <wb-resource deploy-path="/" source-path="/target/m2e-wtp/web-resources"/>
        <wb-resource deploy-path="/" source-path="/src/main/webapp" tag="defaultRootSource"/>
        <wb-resource deploy-path="/WEB-INF/classes" source-path="/src/main/java"/>
        <property name="context-root" value="HelloREST"/>
        <property name="java-output-path" value="/HelloREST/target/classes"/>
    </wb-module>
</project-modules>
我对此一无所知,但仍有两个问题尚未解答(目前对我来说不是很重要): 1. .settings文件是如何弄乱的? 2. 当删除.settings文件时,为什么Eclipse导入现有Maven项目会查看.settings文件,而它在没有.settings文件的情况下也能正常工作? @nitind:你可以从https://github.com/rolfschumacher/RoS-HelloREST.git克隆出有误的项目。

我在我的一个项目上尝试了上述简化后的指令。我只是删除了两个文件,然后运行了maven -> update。aComponent问题目前已经解决。感谢您抽出时间来研究这个问题。如果问题再次出现,我会进行更新。 - Jake88

1
我之前创建的SchoolManagement项目中也遇到了同样的错误: 经过不断搜索,我找到了以下解决方案: 有两种解决方案: 1- 更新Maven(在项目中) 2- 手动删除项目中的.setting文件夹 --> 然后在eclipse中再次更新maven

是的,Jitendra,删除*.settings*文件可以解决问题,但为什么? - ngong

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,