如何在IDEA中使用类路径而不是模块路径运行Java 9应用程序?

当我在IDEA中运行主类时,它将模块及其依赖项放在模块路径上。 是否可以将其更改为类路径?

如果您没有定义module-info,IDEA会在类路径上设置应用程序和依赖项。 由于你有一个模块信息,它是一个显式模块,所以它必须在模块路径上。 通常,您现在可以将自己的家属作为自动模块来处理。

无论如何,你的依赖关系至少有充分的理由进入类路径。 我们在这里讨论过为什么Java 9不会简单地将类路径上的所有JAR转换为自动模块?

例如,mymodule依赖于自动模块,然而它需要一个不能成为自动模块的jar。 在命令行上它会这样:

java -cp legacy.jar -p“mymodule.jar; automodule.jar;” -m mymodule / com.example.mymodule.Application

IMO intellij目前不支持这一点。 作为至少在类路径上运行整个应用程序的解决方法,您可以重命名模型信息以暂时禁用/不是拼图模块。


为了回答这个问题,启发式IDEA用于运行具有模块路径的应用程序目前稍微关闭(IDEA 2018.01)。 显然需要考虑更多因素。

有关详细信息,请参阅IDEA-187390和IDEA-193714 。

因此,如果您当前的项目没有module-info文件,并且您仍然以模块路径结束,那么我知道当前的情况是您从依赖项运行主类。 只需在项目中构建一个小包装器并从那里运行主类,它将带您返回类路径。