Py学习  »  Git

包含依赖项中的git修订

Twelleby • 4 年前 • 122 次点击  

短版本:我想存储最新版本号( 与单个模块相关 )来自当前模块及其在jar清单中的依赖项。

我有一个多模块的maven项目。这些模块被构建到着色jar(包括所有依赖项)中,因此它们可以独立部署。一些模块依赖于其他模块(首先构建的几个模块是其他模块的“commons”)。 在构建这些模块时,我希望包括模块的最新提交版本和依赖项的最新提交版本。我的模块都保存在同一个git repo中(没有“sub gits”)。

例子:

<module>common</module> 
<module>data</module>
<module>application1</module>

前两个模块是公共模块,在 application1 .

假设最近的提交是864ccc,在这里我对数据和 应用1 . Common 但是最后一次更改是在提交889a01中。 在构建这些模块时,我希望清单中有以下输出:

Revision-App: 864ccc
Revision-Common: 889a01
Revision-Data: 864ccc

我以前用过 BuildNumber Maven插件 莫约豪斯和SVN。 通过此设置,我可以在pom.xml中使用以下命令完成此操作:

    <build>
        <sourceDirectory>src</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven-compiler-plugin.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <archive>
                        <index>true</index>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                        <manifestEntries>
                            <URL>${project.url}</URL>
                            <Application-Build-Time>${timeStamp}</Application-Build-Time>
                            <Revision-Appl>${app.rev}</Revision-Application>
                            <Revision-Data>${data.rev}</Revision-Data>
                            <Revision-Common>${common.rev}</Revision-Common>
                        </manifestEntries>
                    </archive>
                    <outputDirectory>../target</outputDirectory>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>${buildnumber-maven-plugin.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.tmatesoft.svnkit</groupId>
                        <artifactId>svnkit</artifactId>
                        <version>1.8.5</version>
                    </dependency>
                </dependencies>
                <configuration>
                    <providerImplementations>
                        <svn>javasvn</svn>
                    </providerImplementations>
                </configuration>
                <executions>
                    <execution>
                        <id>timeStamp</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                        <configuration>
                            <doCheck>false</doCheck>
                            <doUpdate>false</doUpdate>
                            <buildNumberPropertyName>timeStamp</buildNumberPropertyName>
                            <format>{0,date,yyyy-MM-dd HH:mm:ss}</format>
                            <items>
                                <item>timestamp</item>
                            </items>
                            <revisionOnScmFailure>SVN_FAILURE</revisionOnScmFailure>
                        </configuration>
                    </execution>
                    <execution>
                        <id>appRev</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                        <configuration>
                            <doCheck>false</doCheck>
                            <doUpdate>false</doUpdate>
                            <buildNumberPropertyName>app.rev</buildNumberPropertyName>
                            <useLastCommittedRevision>true</useLastCommittedRevision>
                            <scmDirectory>${project.basedir}</scmDirectory>
                        </configuration>
                    </execution>
                    <execution>
                        <id>commonRev</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                        <configuration>
                            <doCheck>false</doCheck>
                            <doUpdate>false</doUpdate>
                            <buildNumberPropertyName>common.rev</buildNumberPropertyName>
                            <useLastCommittedRevision>true</useLastCommittedRevision>
                            <scmDirectory>${project.basedir}/../common</scmDirectory>
                            <getRevisionOnlyOnce>false</getRevisionOnlyOnce>
                            <revisionOnScmFailure>SVN_FAILURE</revisionOnScmFailure>
                        </configuration>
                    </execution>
                    <execution>
                        <id>dataRev</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                        <configuration>
                            <doCheck>false</doCheck>
                            <doUpdate>false</doUpdate>
                            <buildNumberPropertyName>data.rev</buildNumberPropertyName>
                            <useLastCommittedRevision>true</useLastCommittedRevision>
                            <scmDirectory>${project.basedir}/../data</scmDirectory>
                            <getRevisionOnlyOnce>false</getRevisionOnlyOnce>
                            <revisionOnScmFailure>SVN_FAILURE</revisionOnScmFailure>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <artifactSet>
                        <includes>
                            <include>com.company.package:*</include>
                        </includes>
                    </artifactSet>
                    <createDependencyReducedPom>true</createDependencyReducedPom>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

但我一辈子都想不出怎么用git做同样的事情。 我只能得到超级pom(包含模块)的头部版本。

你能帮我用git得到同样的结果吗?

运行mvn build将提供以下输出:




    
[INFO] --- buildnumber-maven-plugin:1.4:create (appRev) @ common ---
[INFO] Executing: /bin/sh -c cd '/home/user/java/application1' && 'git' 'rev-parse' '--verify' 'HEAD'
[INFO] Working directory: /home/user/java/application1
[INFO] Storing buildNumber: 864cccf9056d273313eb9fb690b58674f72d4a6b at timestamp: 1539006765309
[INFO] Storing buildScmBranch: mvn-revision
[INFO] 
[INFO] --- buildnumber-maven-plugin:1.4:create (commonRev) @ common ---
[INFO] Executing: /bin/sh -c cd '/home/user/java/common/../common' && 'git' 'rev-parse' '--verify' 'HEAD'
[INFO] Working directory: /home/user/java/common/../common
[INFO] Storing buildNumber: 864cccf9056d273313eb9fb690b58674f72d4a6b at timestamp: 1539006765326
[INFO] Storing buildScmBranch: mvn-revision
[INFO] 
[INFO] --- buildnumber-maven-plugin:1.4:create (dataRev) @ common ---
[INFO] Executing: /bin/sh -c cd '/home/user/java/common/../data' && 'git' 'rev-parse' '--verify' 'HEAD'
[INFO] Working directory: /home/user/java/common/../data
[INFO] Storing buildNumber: 864cccf9056d273313eb9fb690b58674f72d4a6b at timestamp: 1539006765330
[INFO] Storing buildScmBranch: mvn-revision
[INFO] 

然后我就开始跑了 git rev-parse --verify HEAD 会给我那个输出。但我想让第一行的输出运行 git rev-list --verify HEAD -- . 在当前的工作中。

你有什么想法吗?

我不需要坚持这个插件,我只想结果描述。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/41231
 
122 次点击