代码之家  ›  专栏  ›  技术社区  ›  Guss

Maven:向使用者隐藏源代码生成依赖项

  •  0
  • Guss  · 技术社区  · 6 年前

    然后,当我需要应用程序中的库时,Maven将下载库的POM中指定的所有可传递依赖项,包括仅在代码生成期间使用且运行时不需要的依赖项。

    有没有办法告诉Maven不要将所有依赖项都发布为可传递的依赖项—只发布运行时所需的依赖项?

    库具有多个(非测试)源文件夹:

    • src/main/java -这里存在库公开的自定义代码。
    • src/main/generator -这里存在库未公开的代码生成器代码。

    • generate-code -此配置文件将源控制器重写为生成器源目录,将输出目录重写为自定义 target/generator-classes 目录,还添加生成器代码所需的依赖项。然后在 generate-sources
    • build -此配置文件从 target/generated-sources (代码生成将它们放在哪里)以及主Java源文件,并输出一个JAR。

    不幸的是,如果我跑了 mvn deploy

    1 回复  |  直到 6 年前
        1
  •  0
  •   Guss    6 年前

    我最终做的是为代码生成器创建另一个POM,并使用 maven-invoker-plugin 在主POM构建期间运行它。

    看起来是这样的:

    • generate-resources : maven调用程序插件 generator-pom.xml
      • 调用 :
      • generate-sources : maven-antrun-plugin 为生成器创建一些资源
      • compile : maven-compiler-plugin src/generator/java
      • 编译 target/generated-sources
    • 生成源 build-helper-maven-plugin 添加源 目标/生成源
    • 编译 : maven编译器插件 同时编译 src/main/java 目标/生成源
    • test
    • package ...
    • deploy ...

    当马文跑的时候 部署 ,它只发布主POM文件和 maven-source-plugin

    这个 构建助手maven插件 add-source

    主POM文件如下所示:

    ...
    <plugins>
        <plugin>
            <artifactId>maven-invoker-plugin</artifactId>
            <configuration>
                <pom>generator-pom.xml</pom>
                <showErrors>true</showErrors>
                <streamLogs>true</streamLogs>
            </configuration>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-resources</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>add-source</goal>
                    </goals>
                    <configuration>
                        <sources>
                            <source>${project.build.directory}/generated-sources/mystuff</source>
                        </sources>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>${maven.compiler.plugin.version}</version>
        </plugin>
    
        <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version> <!-- needed to run JUnit 5 tests -->
        </plugin>
    
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
        </plugin>
    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-source-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-javadoc-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>jar</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    
    </plugins>
    

    (生成器POM指的是我公司很多封闭源代码的东西,所以不要偷看,抱歉)。