有没有办法用 maven 签出 git 存储库到某个文件夹?

Posted

技术标签:

【中文标题】有没有办法用 maven 签出 git 存储库到某个文件夹?【英文标题】:Is there a way to checkout git repository, to certain folder with maven? 【发布时间】:2019-08-14 00:35:04 【问题描述】:

我正在尝试自动将仅包含协议缓冲区(带有结构)的存储库下载到“资源”文件夹以供以后处理。

我需要这种功能,将我的*.proto 文件与 c++ 和 java 代码分开,因为它们在技术上是不相互连接的(java 应用程序用于调试)。

我想要的效果是至少将 repo 签入项目 - 我梦想的效果是每次运行 maven 时都会更新这个 repo。

BR

【问题讨论】:

听起来像是 Jenkins 这样的 CI 解决方案的工作? 并非如此。我正在为.proto 定义使用单独的存储库,以允许从事 c++ 项目的人员对其进行编辑和提交。因此,我不必不断地来回复制文件。此时我必须手动执行此操作,而在 c++ 代码中我可以使用 CMake 为我处理它(获取每个构建,并在更改时重新构建)。 听起来您可能想查看git submodule,它允许您将一个版本控制的存储库嵌入到另一个存储库中。如果您只关心“最新”,请启用submodule.recurse。 Maven 根本不需要任何特殊处理... 我从来不知道这个功能。这是一个很好的建议!你应该写答案,这样我才能接受! :D 【参考方案1】:

编辑

在处理了很多这样的问题之后,我个人发现 git 子模块可能是你的解决方案(如果你不使用 svn)。


好的,所以在谷歌搜索之后,我发现了这个:maven-scm-plugin,即使从描述中也能解决我的要求。

为了节省大多数人的时间,我将粘贴使用示例,以使其正常工作。

您需要将其添加到您的 pom 结构中:

<project>
    <scm>
        <connection>scm:git:[YOUR_PROJECT_URL]</connection>
    </scm>
    
    <--! second part -->

    <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-scm-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.codehaus.plexus</groupId>
                    <artifactId>plexus-utils</artifactId>
                    <version>2.1</version>
                </dependency>
                <dependency>
                    <groupId>org.apache.maven.scm</groupId>
                    <artifactId>maven-scm-provider-gitexe</artifactId>
                    <version>1.2</version>
                </dependency>
            </dependencies>
            <version>1.0</version>
            <configuration>
                <connectionType>connection</connectionType>
                <!-- YOUR PATH HERE -->
                <checkoutDirectory>src/main/resources/meta</checkoutDirectory>
            </configuration>
            <executions>
                <execution>
                    <id>tag</id>
                    <phase>deploy</phase>
                    <goals>
                        <goal>tag</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
</project>

【讨论】:

以上是关于有没有办法用 maven 签出 git 存储库到某个文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

使用凭据签出 Jenkins Pipeline Git SCM?

vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树。请问是啥问题,如何解决。

git-svn 多个 git 存储库到同一个 svn 存储库

使用远程 Git 签出存储库运行 eclipse

带有 CRLF 和 LF 文件的 Git 存储库?

从github迁移git存储库到gitee 2022-02-15