首页 > 解决方案 > 将 maven 项目迁移到模块 - 忽略 module-info.java

问题描述

我们目前正在迁移到 JPMS,为 maven 多模块项目中的所有模块设置 module-info.java。

对我们来说,最好让 module-info.java 已经驻留在“dev”分支中但不影响任何构建。所以想法是默认排除 module-info.java 并仅将其包含在特定的 Maven 配置文件中。

那有意义吗?

无论如何,对我不起作用,即使在排除部分如下所示,也会选择 module-info.java:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>${version.maven-compiler-plugin}</version>
    <configuration>
        <source>${maven.compiler.source}</source>
        <target>${maven.compiler.target}</target>
        <release>${maven.compiler.release}</release>
        <compilerArgs>
            <arg>-Xlint:${maven.compiler.warningsToIgnore}</arg>
        </compilerArgs>
        <excludes>
            <exclude>**/module-info.java</exclude>
        </excludes>
    </configuration>
</plugin>

有任何想法吗?

PS:想法取自How to exclude module-info.java in Netbeans (11)?

标签: javamavenjava-platform-module-system

解决方案


过滤器不适用于module-info.java仍然很有趣,但是查看编译器插件的源代码我猜这就是它的方式:

https://github.com/apache/maven-compiler-plugin/blob/master/src/main/java/org/apache/maven/plugin/compiler/CompilerMojo.java

    protected void preparePaths( Set<File> sourceFiles )
    {
        //assert compilePath != null;

        File moduleDescriptorPath = null;

        boolean hasModuleDescriptor = false;
        for ( File sourceFile : sourceFiles )
        {
            if ( "module-info.java".equals( sourceFile.getName() ) )
            {
                moduleDescriptorPath = sourceFile;
                hasModuleDescriptor = true;
                break;
            }
}

推荐阅读