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

时间:2016-02-26 00:39:38

标签: maven maven-3 maven-install-plugin

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

Repeat 
   $listRef:=New list
   CLEAR LIST($listRef;*)
Until (<>crashed_or_quit)

由于我们的构建在离开后如何完成的复杂原因,我们不希望它部署到构建主机的本地Maven存储库(project libs module-A module-B module-N library-module )。相反,我们希望它位于项目本地的子目录中,此处为 ~/.m2/repository

从命令行,我知道以下内容将把它放到本地Maven存储库中,但是我不想从命令行执行此操作,并且我不希望结果转到本地Maven存储库。我希望在library-module子目录中的构建系统运行libs时发生这种情况。

mvn install

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

1 个答案:

答案 0 :(得分:0)

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

  • 通过skip
  • Maven Install Plugin选项禁用默认工件安装到本地存储库
  • 在POM中配置install-file目标,以便将其作为构建的一部分(因此无需从命令行手动调用它)

以下配置将提供:

<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属性(用于项目坐标和包装),但您可以根据需要更改它们(或硬编码实际值)。

另请注意,install-file目标将在lib文件夹下重新创建与本地存储库(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>

这次我们没有使用install-file目标,而是使用Maven Jar Pluginjar目标将打包的工件直接放到lib文件夹中(而不是标准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>