代码之家  ›  专栏  ›  技术社区  ›  Russ Bateman Basil Bourque

如何在我指定为附加存储库的本地子目录中创建专用JAR?

  •  1
  • Russ Bateman Basil Bourque  · 技术社区  · 9 年前

    在项目下的子目录中,我有一个我编写和维护的代码库模块,必须与较大项目中的其他模块共享。为了方便起见,它与使用它的所有模块同时开发。

    project
      libs
      module-A
      module-B
      module-N
      library-module
    

    由于构建离开我们手中后如何完成的复杂原因,我们不希望将其部署到构建主机的本地Maven存储库中( ~/.m2/repository ). 相反,我们希望它位于项目的本地子目录中 libs .

    从命令行,我知道下面的命令会将其放入本地Maven存储库,但我不想从命令行执行此操作,也不想将结果放入本地Mavin存储库。我希望这发生在 mvn install 由库模块子目录中的生成系统运行。

    mvn install:install-file -Dfile=your-artifact-1.0.jar \
                             [-DpomFile=your-pom.xml] \
                             [-Dsources=src.jar] \
                             [-Djavadoc=apidocs.jar] \
                             [-DgroupId=org.some.group] \
                             [-DartifactId=your-artifact] \
                             [-Dversion=1.0] \
                             [-Dpackaging=jar] \
                             [-Dclassifier=sources] \
                             [-DgeneratePom=true] \
                             [-DcreateChecksum=true]
    

    (请注意,我正在寻找的答案不会依赖于IDE。)

    1 回复  |  直到 9 年前
        1
  •  1
  •   A_Di-Matteo    9 年前

    为了满足所提供的要求,需要两个配置步骤:

    以下配置将提供:

    <properties>
        <library.repository.folder>../libs</library.repository.folder>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>install-artifact</id>
                        <phase>install</phase>
                        <goals>
                            <goal>install-file</goal>
                        </goals>
                        <configuration>
                            <groupId>${project.groupId}</groupId>
                            <artifactId>${project.artifactId}</artifactId>
                            <version>${project.version}</version>
                            <packaging>${project.packaging}</packaging>
                            <file>${project.build.directory}/${project.build.finalName}.${project.packaging}</file>
                            <localRepositoryPath>${library.repository.folder}</localRepositoryPath>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    

    请注意 library.repository.folder 用于指向所需目标的属性 lib 文件夹(在不同路径的情况下更改)。上面提供的配置使用了标准maven属性(用于项目坐标和打包),但您可以根据需要更改它们(或硬代码实际值)。

    还要注意 安装文件 目标将在 图书馆 文件夹与本地存储库中的文件夹结构相同(lib\groupId\artifactId\version\file.jar)。如果您希望将文件直接放在lib文件夹(lib\file.jar)下,那么可以转到以下配置:

    <properties>
        <library.repository.folder>../libs</library.repository.folder>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <outputDirectory>${library.repository.folder}</outputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>
    

    这次我们不使用 安装文件 而是目标 jar 目标 Maven Jar Plugin 将打包的工件直接放置到 图书馆 文件夹(而不是标准 target 文件夹)和打包过程中 phase (不是 install ).

    如果出于任何原因,您希望将最终工件保留在目标文件夹中,并在安装阶段将其直接复制到lib文件夹(没有maven文件夹层次结构),那么您可以转到以下配置:

    <properties>
        <library.repository.folder>../libs</library.repository.folder>
    </properties>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-install-plugin</artifactId>
                <version>2.5.2</version>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <executions>
                    <execution>
                        <id>re-package-into-lib</id>
                        <phase>install</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${library.repository.folder}</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>