maven with eclipse error" Path必须包含项目和资源名称"

时间:2014-08-08 15:14:04

标签: java eclipse maven

我最近开始使用maven和eclipse。

我已经设置了几个项目,我注意到如果我尝试指定项目目录之外的构建目录(覆盖目标),那么在执行“更新项目”时会出错:< / p>

'正在更新Maven项目'遇到了问题。

在“更新MAven项目”期间发生内部错误。 路径必须包含项目和资源名称:/ [我的项目名称]

我需要在项目之外进行构建。我怎么能绕过这个?我可以让maven自动创建一个软链接吗?

6 个答案:

答案 0 :(得分:5)

虽然这是一个相当老的线程,但我最近遇到了这个问题,并且能够解决它。 maven抛出此错误的原因是我在pom.xml文件中的某个地方,一个绝对路径与项目导入eclipse的目录不一致。所以我有两个绝对路径(一个不正确,或指向前一个位置)指向project.build.outputDirectory文件中的资源,即pom.xml

解决方案:找到错误的绝对路径/home/userA/ProjectB/bin,并替换为相对的./bin路径。在eclipse中更新项目,你应该没问题。

答案 1 :(得分:1)

这是一个有点老的线索,但因为没有人给出正确答案......

以下Eclipse错误:

An internal error occurred during: "Updating Maven Project".
java.lang.IllegalArgumentException: Path must include project and resource name:
    at org.eclipse.core.runtime.Assert.isLegal(Assert.java:63)
    at org.eclipse.core.internal.resources.Workspace.newResource(Workspace.java:2069)
    at ...

可能出现在许多不同的场景中 - 在Eclipse Bugzilla中你可以找到很多类似的bug报告。

在您描述的情况下,这是已知限制。但这不是m2e错误 - 只是Eclipse JDT不允许在项目之外设置输出目录。
恕我直言,很遗憾,因为如果maven支持这样的布局,那么我希望m2e也是如此。

我已将其报告为bug 493229。但已关闭状态 WONTFIX

答案 2 :(得分:0)

例如,如果您希望在工作区外的某个文件夹中构建内容,则可以使用以下内容:

<build>
<plugins>
  <plugin>
    <executions>
        <execution>

        <phase>move-build</phase>
        ////do your build
  </plugin>

  <plugin>
    <executions>
        <execution>
        <id>copy-resources</id>
        <phase>move-build</phase>
        // do your copying to external
  </plugin>

  <plugin>
    <executions>
            <execution>

        <phase>move-build</phase>
        // do your deletions from target
  </plugin>

</plugins>
</build>

然后您可以致电mvn move-build进行构建,复制,删除。

以下是copy to external folderdelete的示例,您可以将它们组合到您的移动构建阶段,如上所述

答案 3 :(得分:0)

why can't I build somewhere like ../build

是的,你可以构建一个名为build的文件夹,只要它包含pom.xml

pom.xml文件是Maven中项目配置的核心。它是一个单一的配置文件,包含构建项目所需的大部分信息。

简而言之,pom.xml将拥有构建项目的所有信息。 pom.xml是一个文件,其中包含Maven使用的项目配置详细信息。它提供了项目所需的所有配置。

答案 4 :(得分:0)

要回答问题中的最后一段,您可以使用软链接解决问题。我做的与你猜测的有点不同。创建符号链接不是Maven,因为这是Eclipse JDT的问题(正如其他人所指出的那样),有时会运行而不会调用Maven(似乎)。这就是我所做的,包含与Maven项目目录相关的所有路径:

1)我希望我的实际构建目录为“../../ local / java / scratch / target”

2)我创建了一个软链接:@SpringBootApplication @Controller public class AngularApplication { public static void main(String[] args) { SpringApplication.run(AngularApplication.class, args); } @GetMapping("/resource") @ResponseBody public Map<String, Object> home() { Map<String, Object> model = new HashMap<String, Object>(); model.put("id", UUID.randomUUID().toString()); model.put("content", "Hello World"); return model; } }

3)我将此条目添加到我的“pom.xml”:

ln -s ../../local ./

现在,Eclipse JDT很高兴地认为它正在项目目录中构建,但实际上路径“../../”将其置于项目目录之外。我的猜测是绝对路径也会起作用。

答案 5 :(得分:0)

我确信这个问题是由 Maven 或 Eclipse 引起的,也许是因为我在 Stackoverflow 上发现了这个和其他对该组合的引用。

经过大量调查并有点生气,结果证明是 Git 参与了——尽管我不知道这是不是原因。

我的Maven项目由几个“嵌套”的POM组成,我没有在Eclipse中打开父POM,而只打开子POM。我在顶层有几个文件(批处理脚本)我没有提交给 Git,但是一旦我提交了这些

import template from './custom-product-detail.html.twig';

const { Component, Mixin } = Shopware;
const { Criteria } = Shopware.Data;
const newLocal = 'custom_product';

Component.register('custom-product-detail', {
    template,

    inject: [
        'repositoryFactory',
    ],

    mixins: [
        Mixin.getByName('notification')
    ],

    metaInfo() {
        return {
            title: this.$createTitle()
        };
    },

    data() {
        return {
            module: null,
            isLoading: false,
            processSuccess: false,
            repository: null
        };
    },

    created() {
        this.repository = this.repositoryFactory.create(newLocal);
        this.getCustom();
    },

    computed: {

        propertyGroupRepository() {
            return this.repositoryFactory.create('property_group');
        },

        customProperties() {
            const criteria = new Criteria();

            criteria.addFilter(Criteria.equals('relations.entityName', 'property_group'));
            return criteria;
        }
    },

    methods: {
        getCustom() {
            this.customProperties();
            const criteria = new Criteria();
            criteria.addAssociation('propertyGroupTranslation');

            this.repository
                .get(this.$route.params.id, Shopware.Context.api, criteria)
                .then((entity) => {
                    this.module = entity;
                });
        },

        onClickSave() {
            this.isLoading = true;

            this.repository
                .save(this.module, Shopware.Context.api)
                .then(() => {
                    this.getCustom();
                    this.isLoading = false;
                    this.processSuccess = true;
                }).catch((exception) => {
                    this.isLoading = false;
                    this.createNotificationError({
                        title: this.$t('custom-variant-product.detail.error-message'),
                        message: exception
                    });
                });
        },

        saveFinish() {
            this.processSuccess = false;
        }
    }
});

问题完全消失。

<块引用>

Eclipse 版本:2020-12 (4.18.0)