在Maven构建中包括一个合成文件作为javadoc构件



我正在用Maven构建一个多模块项目,其中一个模块代表另一个模块的阴影版本:

父母


| -基地
| - base-shaded

base模块包含我所有的源文件,但是我想将依赖项导入到我自己的命名空间中。这个阴影模块由我的base-shaded模块描述,它基本上只包含一个POM,它配置了对base和Maven阴影插件的依赖。

这很好。Shade插件包含了所有的依赖关系,并创建了一个带阴影的工件,包括一个源工件。然而,我错过了一个javadoc工件,这不是由阴影插件创建的。因此,我尝试复制base模块的javadoc工件。然而,release:release目标忽略了这些阻止我部署到Maven Central的构件。尽管如此,我还是设法复制了这些文件,并将它们包含在install target中。

在构建中包含非组装文件是否有规范的方式?我开始认为我可能是错误的方法。

这是我的base-shaded POM的插件配置。对不起,它是这么多,但最后,它是Maven XML:

    <!-- Shade dependencies -->
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>${version.plugin.shade}</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
        <configuration>
        <shadedArtifactAttached>false</shadedArtifactAttached>
        <createDependencyReducedPom>true</createDependencyReducedPom>
        <dependencyReducedPomLocation>
          ${project.build.directory}/dependency-reduced-pom.xml
        </dependencyReducedPomLocation>
        <createSourcesJar>true</createSourcesJar>
        <shadeSourcesContent>true</shadeSourcesContent>
        <relocations>
          <relocation>
            <pattern>${shade.source}</pattern>
            <shadedPattern>${shade.target}</shadedPattern>
          </relocation>
        </relocations>
      </configuration>
    </execution>
  </executions>
</plugin>
<!-- Copy dependency version's javadoc artifacts -->
<plugin>
  <groupId>com.github.goldin</groupId>
  <artifactId>copy-maven-plugin</artifactId>
  <version>${version.plugin.copy}</version>
  <executions>
    <execution>
      <phase>package</phase>
        <goals>
          <goal>copy</goal>
        </goals>
        <configuration>
          <resources>
            <resource>
              <targetPath>${project.build.directory}</targetPath>
              <file>
                ${project.basedir}/../base/target/base-${project.version}-javadoc.jar
              </file>
              <destFileName>base-${project.version}-javadoc.jar</destFileName>
            </resource>
          <resource>
            <targetPath>${project.build.directory}</targetPath>
            <file>
              ${project.basedir}/../base/target/base-${project.version}-javadoc.jar.asc
            </file>
            <destFileName>base-shaded-${project.version}-javadoc.jar.asc</destFileName>
          </resource>
        </resources>
      </configuration>
    </execution>
  </executions>
</plugin>
<!-- Because the javadoc files are copied manually, they must be installed manually as well -->
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-install-plugin</artifactId>
  <executions>
    <execution>
      <id>install-javadoc</id>
      <phase>install</phase>
      <goals>
        <goal>install-file</goal>
      </goals>
      <configuration>
        <groupId>${project.groupId}</groupId>
        <artifactId>${project.artifactId}</artifactId>
        <version>${project.version}</version>
        <packaging>jar</packaging>
        <classifier>javadoc</classifier>
        <file>${build.directory}/base-shaded-${project.version}-javadoc.jar</file>
      </configuration>
    </execution>
    <execution>
      <id>install-javadoc-asc</id>
      <phase>install</phase>
      <goals>
        <goal>install-file</goal>
      </goals>
      <configuration>
        <groupId>${project.groupId}</groupId>
        <artifactId>${project.artifactId}</artifactId>
        <version>${project.version}</version>
        <packaging>jar.asc</packaging>
        <classifier>javadoc</classifier>
        <file>${build.directory}/base-shaded-${project.version}-javadoc.jar.asc</file>
      </configuration>
    </execution>
  </executions>
</plugin>

当然,这个任务有一个插件build-helper-maven-plugin .

我们使用如下代码将未着色模块生成的javadoc附加到着色模块

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>attach</id>
            <phase>package</phase>
            <goals>
                <goal>attach-artifact</goal>
            </goals>
            <configuration>
               <artifacts>
                  <artifact>
                      <file>../unshaded-module/target/unshaded-module-${project.version}-javadoc.jar</file>
                      <type>jar</type>
                      <classifier>javadoc</classifier>
                  </artifact>
               </artifacts>
            </configuration>
        </execution>
    </executions>
 </plugin>

最新更新