【问题标题】:How can I use Maven to generate a JAR file from the contents of a directory I specify?如何使用 Maven 从我指定的目录的内容生成 JAR 文件?
【发布时间】:2019-10-08 10:31:32
【问题描述】:

我正在使用 maven-deploy-plugin 将第三方 jar(之前从此处未显示的插件下载到我的目标目录)以名称“third-party-1.0.jar”部署到 Nexus,这就是全部使用下面的配置可以正常工作。

我的目标目录中还有一个javadoc 目录,即这个第三方jar 的javadoc。我想将该javadoc 目录打包为“third-party-1.0-javadoc.jar”。

如果我可以将目录打包为 JAR,我想我可以使用下面部署插件的 javadoc 参数来部署它,只是不确定如何将自定义目录打包为 JAR使用 Maven 的具体名称,也许是程序集插件?

TLDR;如何使用 Maven 从我指定的目录的内容创建 JAR 文件?

<plugin>
    <artifactId>maven-deploy-plugin</artifactId>
    <version>2.8.2</version>
    <executions>
        <execution>
            <id>default-deploy</id>
            <phase>none</phase>
        </execution>

        <execution>
             <id>deploy-jar</id>
             <phase>deploy</phase>
             <goals>
                 <goal>deploy-file</goal>
             </goals>
             <configuration>
             <file>${project.build.directory}/code.jar</file>
             <url>...</url>
             <repositoryId>...</repositoryId>  
             <url>...</url>            
             <packaging>jar</packaging>
             <generatePom>true</generatePom>
             <groupId>com.example</groupId>
             <artifactId>third-party</artifactId>
             <version>1.0</version> 
             </configuration>     
        </execution>
    </executions>
</plugin>

【问题讨论】:

    标签: java maven maven-assembly-plugin maven-deploy-plugin


    【解决方案1】:

    您可以使用maven-jar-pluginmaven-assembly-plugin 来实现它

    这是通过maven-jar-plugin实现它的一种方法

    <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.1.1</version>
        <executions>
            <execution>
                <configuration>
                    <classifier>docs</classifier>
                    <classesDirectory>${project.build.directory}/docs</classesDirectory>
                    <includes>**/*</includes>
                </configuration>
                <id>pack-docs</id>
                <phase>package</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    

    现在运行:

    mvn clean package
    

    它将创建artifact_name-1.0.0-docs.jar jar

    How to create addition jar using Maven?

    【讨论】:

    • 谢谢,我注意到在 'mvn deploy' 期间,它现在尝试部署使用 maven-jar-plugin 构建的 JAR,这是一个关于此的想法吗?
    • @Rory 在你的 Maven 部署插件中创建两个执行点。
    【解决方案2】:

    我最终使用了 maven-assembly-plugin 而不是 maven-jar-plugin,因为它允许对生成的 JAR 进行更多控制,包括不向其中添加 pom.xml,不将其作为工件附加到项目中要部署(attach=false),以及如何部署 被称为。这允许 maven-deploy-plugin 控制它的部署方式,以及部署它时使用的 Maven 坐标。

    然后我可以使用 javadoc 标签将使用程序集插件构建的 Javadoc JAR 附加到我的部署文件执行中:

    src/main/assembly/assembly.xml

    <assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">
        <id>package-third-party-javadoc</id>
        <formats>
            <format>jar</format>
        </formats>
        <includeBaseDirectory>false</includeBaseDirectory>
        <fileSets>
            <fileSet>
                <directory>${project.build.directory}/dir</directory>  
                <outputDirectory>.</outputDirectory>
            </fileSet>
        </fileSets>
    </assembly>
    

    pom.xml

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.1.1</version>
        <executions>
            <execution>
                <id>package-third-party-javadoc</id>
                <phase>compile</phase>
                <goals>
                    <goal>single</goal>
                </goals>
                <configuration>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                    <finalName>third-party-javadoc</finalName>
                    <appendAssemblyId>false</appendAssemblyId>
                    <attach>false</attach>  
                </configuration>
            </execution>
        </executions>
    </plugin>
    
    <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.2</version>
        <executions>
            <execution>
                <id>default-deploy</id>
                <phase>none</phase>
            </execution>
    
            <execution>
                <id>deploy-jar</id>
                <phase>deploy</phase>
                <goals>
                    <goal>deploy-file</goal>
                </goals>
                <configuration>
                    <file>${project.build.directory}/code.jar</file>
                    <url>...</url>
                    <repositoryId>...</repositoryId>  
                    <url>...</url>            
                    <packaging>jar</packaging>
                    <generatePom>true</generatePom>
                    <groupId>com.example</groupId>
                    <artifactId>third-party</artifactId>
                    <version>1.0</version> 
                    <javadoc>${project.build.directory}/third-party-javadoc.jar</javadoc>
                </configuration>     
            </execution>
        </executions>
    </plugin>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-18
      • 2012-05-03
      • 2012-10-11
      • 1970-01-01
      • 2019-02-17
      • 2017-10-04
      相关资源
      最近更新 更多