Maven 和 Intellij 构建不同

Maven and Intellij builds differently

我有一个父 pom. 当我在父节点上并编写 mvn clean install 我的 dropwizard 应用程序构建正常。

然而,在 Intellij 中它失败了,因为它找不到我的 config.yml 文件。

问题是我需要在 Intellij 中包含我的模块目录,而不是在 Maven 中。这是为什么?

运行 mvn install 这个有效

public static void main(String[] args) throws Exception {
    new CivilizationApplication().run(new String[]{"server", "src/main/resources/config.yml"});
}

在 Intellij 中,我必须更改为以下内容

public static void main(String[] args) throws Exception {
    new CivilizationApplication().run(new String[]{"server", "civilization-rest/src/main/resources/config.yml"});
}

如何配置 Intellij,使其在不指定模块目录的情况下运行?

您可以尝试在 运行 配置中设置您的工作目录...

我还会查看您的 pom.xml 配置,看看您是否可以更改工作源集以在导入 maven 项目时使用此目录。

您可以告诉 Intellij 做与 Maven 启动时完全相同的事情。

您可以通过单击 "Launch App" 按钮旁边的下拉菜单来完成此操作。在那里,您可以通过单击左侧的 + 然后选择 Maven 来定义一个使用 Maven 的新 运行 配置。

然后您只需在显示 "Command line" 的地方输入 clean install exec:java,它的工作方式应该与您从命令行手动执行时完全一样。调试应该也是这样,没有任何问题。

Working directory 设置为 $MODULE_DIR$。 Maven 始终使用 $MODULE_DIR$,但在 IntelliJ 应用程序执行中您可能没有默认的 $MODULE_DIR$。

这里的问题是您使用相对路径而不是类路径来引用资源文件。

所以,而不是

new CivilizationApplication().run(new String[]{"server", "src/main/resources/config.yml"});

你最好有这个

new CivilizationApplication().run("server", getClass().getResourceAsStream("config.yml"));

(显然,还要确保更改 #运行() 方法的签名)

只是一个想法,但可能与未复制资源有关。

我在 OSX,所以如果你在 Windows,确切的条款可能会有所不同,但对我来说......在首选项中,select "Build, Execution, Deployment",然后 "Compiler",并尝试将“;?*.yml”添加到资源模式。