后续第2部分 - 使用Maven仅签名和部署jar到Maven Central。构建和编译完全由Ant完成

时间:2014-07-17 02:13:47

标签: java maven ant

以下是: Followup questions: Using Maven to only sign and deploy jars to Maven Central. Build and compilation is done entirely with Ant


感谢前面问题的答案,以及来自sonatype支持人员的一些建议,我刚刚第一次"非失败"。这是mvn deploy的当前输出:

[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building XBN-Java 0.1.2-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO]
[INFO] --- maven-enforcer-plugin:1.0:enforce (enforce-maven) @ xbnjava ---
[INFO]
[INFO] --- maven-install-plugin:2.4:install (default-install) @ xbnjava ---
[INFO] Installing R:\jeffy\programming\sandbox\xbnjava\pom.xml to C:\Users\jeffy\.m2\repository\com\github\aliteralmind\xbnjava\0.1.2-SNAPSHOT\xbnjava-0.1.2-SNAPSHOT.pom
[INFO]
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ xbnjava ---
Downloading: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/0.1.2-SNAPSHOT/maven-metadata.xml
607/607 B
Downloaded: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/0.1.2-SNAPSHOT/maven-metadata.xml (607 B at 0.5 KB/sec)
Uploading: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/0.1.2-SNAPSHOT/xbnjava-0.1.2-20140717.010135-5.pom
2/4 KB
4/4 KB
Uploaded: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/0.1.2-SNAPSHOT/xbnjava-0.1.2-20140717.010135-5.pom (4 KB at 11.9 KB/sec)
Downloading: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/maven-metadata.xml
290/290 B
Downloaded: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/maven-metadata.xml (290 B at 1.5 KB/sec)
Uploading: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/0.1.2-SNAPSHOT/maven-metadata.xml
607/607 B
Uploaded: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/0.1.2-SNAPSHOT/maven-metadata.xml (607 B at 2.5 KB/sec)
Uploading: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/maven-metadata.xml
290/290 B
Uploaded: https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava/maven-metadata.xml (290 B at 1.0 KB/sec)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.579 s
[INFO] Finished at: 2014-07-16T21:01:36-04:00
[INFO] Final Memory: 7M/19M
[INFO] ------------------------------------------------------------------------

根据此日志,以下文件已上传到

https://oss.sonatype.org/content/repositories/snapshots/com/github/aliteralmind/xbnjava

  • maven-metadata.xml
  • 0.1.2-SNAPSHOT/maven-metadata.xml
  • 0.1.2-SNAPSHOT/xbnjava-0.1.2-20140717.010135-5.pom

当我在浏览器中查看该目录时,我会看到以下文件:

  • maven-metadata.xml(所有文件也有md5sha1版本)
  • 0.1.2-SNAPSHOT/maven-metadata.xml
  • 0.1.2-SNAPSHOT/xbnjava-0.1.2-20140716.174151-1.pom

因此,我不明白为什么日志显示20140717文件已发送,但服务器实际上包含20140716版本。但是,目标是

,这是一个更大的问题
  • xbnjava-0.1.2.jar
  • xbnjava-0.1.2-sources.jar
  • xbnjava-0.1.2-javadoc.jar
服务器上的

(以及他们的*.asc个随播广告)并且都没有。

在POM中,我有这个属性

<properties>
   <jarprefix>../build/${project.artifactId}-${project.version}/download/${project.artifactId}-${project.version}</jarprefix>
</properties>

和这个plugins块(它是profiles部分的一个子集),其中包含三个工件,每个工件都明确指向这三个jar文件中的一个

<plugins>
   <plugin>
      <groupId>org.codehaus.mojo</groupId>
      <artifactId>build-helper-maven-plugin</artifactId>
      <version>1.8</version>
      <executions>
         <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
               <goal>attach-artifact</goal>
            </goals>
            <configuration>
               <artifacts>
                  <artifact>
                     <file>${jarprefix}.jar</file>
                     <type>jar</type>
                  </artifact>
                  <artifact>
                     <file>${jarprefix}-javadoc.jar</file>
                     <type>jar</type>
                     <classifier>javadoc</classifier>
                  </artifact>
                  <artifact>
                     <file>${jarprefix}-sources.jar</file>
                     <type>jar</type>
                     <classifier>sources</classifier>
                  </artifact>
               </artifacts>
            </configuration>
         </execution>
      </executions>
   </plugin>
</plugins>

(POM是

R:\jeffy\programming\sandbox\xbnjava\pom.xml

罐子在

R:\jeffy\programming\build\xbnjava-0.1.1\download

那么将POM送到

的下一步是什么?
  1. 识别jar文件
  2. 签名(并提示我输入我的公钥密码,对吗?)和
  3. 将他们推到Maven?
  4. 以下是我更新的settings.xmlpom.xml

    (sonatype支持人员还建议考虑"minimal Maven" idea,这完全避免了POM。这是一个有趣的想法,但我想首先看到这一点。)

    感谢您帮助我。




    设定:

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
       <servers>
          <server>
             <id>ossrh</id>
             <username>aliteralmind</username>
             <password>MY_SONATYPE_DOT_COM_PASSWORD</password>
          </server>
       </servers>
       <pluginGroups></pluginGroups>
       <proxies></proxies>
       <mirrors></mirrors>
       <profiles></profiles>
    </settings>
    

    POM:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
       <modelVersion>4.0.0</modelVersion>
       <groupId>com.github.aliteralmind</groupId>
       <artifactId>xbnjava</artifactId>
       <packaging>pom</packaging>
       <version>0.1.2-SNAPSHOT</version>
       <name>XBN-Java</name>
       <url>https://github.com/aliteralmind/xbnjava</url>
       <inceptionYear>2014</inceptionYear>
       <organization>
          <name>Jeff Epstein</name>
       </organization>
       <description>XBN-Java is a collection of generically-useful backend (server side, non-GUI) programming utilities, featuring RegexReplacer and FilteredLineIterator. XBN-Java is the foundation of Codelet (http://codelet.aliteralmind.com).</description>
    
       <parent>
          <groupId>org.sonatype.oss</groupId>
          <artifactId>oss-parent</artifactId>
          <version>7</version>
       </parent>
    
       <licenses>
          <license>
             <name>Lesser General Public License (LGPL) version 3.0</name>
             <url>https://www.gnu.org/licenses/lgpl-3.0.txt</url>
          </license>
          <license>
             <name>Apache Software License (ASL) version 2.0</name>
             <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
          </license>
       </licenses>
    
       <developers>
          <developer>
             <name>Jeff Epstein</name>
             <email>aliteralmind-github@yahoo.com</email>
             <roles>
                <role>Lead Developer</role>
             </roles>
          </developer>
       </developers>
    
       <issueManagement>
          <system>GitHub Issue Tracker</system>
          <url>https://github.com/aliteralmind/xbnjava/issues</url>
       </issueManagement>
    
       <distributionManagement>
          <snapshotRepository>
             <id>ossrh</id>
             <url>https://oss.sonatype.org/content/repositories/snapshots</url>
          </snapshotRepository>
       </distributionManagement>
    
       <scm>
          <connection>scm:git:git@github.com:aliteralmind/xbnjava.git</connection>
          <url>scm:git:git@github.com:aliteralmind/xbnjava.git</url>
          <developerConnection>scm:git:git@github.com:aliteralmind/xbnjava.git</developerConnection>
       </scm>
    
       <properties>
          <java.version>1.7</java.version>
          <jarprefix>../build/${project.artifactId}-${project.version}/download/${project.artifactId}-${project.version}</jarprefix>
       </properties>
    
       <profiles>
          <!--
          This profile will sign the JAR file, sources file, and javadocs file using the GPG key on the local machine.
          See: https://docs.sonatype.org/display/Repository/How+To+Generate+PGP+Signatures+With+Maven
          -->
          <profile>
             <id>release-sign-artifacts</id>
             <activation>
                <property>
                   <name>release</name>
                   <value>true</value>
                </property>
             </activation>
             <build>
                <plugins>
                   <plugin>
                      <groupId>org.codehaus.mojo</groupId>
                      <artifactId>build-helper-maven-plugin</artifactId>
                      <version>1.8</version>
                      <executions>
                         <execution>
                            <id>attach-artifacts</id>
                            <phase>package</phase>
                            <goals>
                               <goal>attach-artifact</goal>
                            </goals>
                            <configuration>
                               <artifacts>
                                  <artifact>
                                     <file>${jarprefix}.jar</file>
                                     <type>jar</type>
                                  </artifact>
                                  <artifact>
                                     <file>${jarprefix}-javadoc.jar</file>
                                     <type>jar</type>
                                     <classifier>javadoc</classifier>
                                  </artifact>
                                  <artifact>
                                     <file>${jarprefix}-sources.jar</file>
                                     <type>jar</type>
                                     <classifier>sources</classifier>
                                  </artifact>
                               </artifacts>
                            </configuration>
                         </execution>
                      </executions>
                   </plugin>
                </plugins>
             </build>
          </profile>
       </profiles>
    </project>
    

2 个答案:

答案 0 :(得分:2)

您正在release-sign-artifacts配置文件中附加工件,这些工件可能在您运行'mvn deploy'命令时被禁用。尝试运行mvn deploy -Drelease=true或将release-sign-artifacts个人资料移至主.pom部分。不确定您是否需要单独的个人资料。

时间戳很好。这就是Maven存储库存储SNAPSHOT的方式。

Maven有一个陡峭的学习曲线,但一旦你理解了它的基本概念,它就会起作用。

答案 1 :(得分:1)

这是我所做的更改,如@AlexeyGavrilov's answer中所述:

原件:

<profiles>
   <!--
   This profile will sign the JAR file, sources file, and javadocs file using the GPG key on the local machine.
   See: http://blog.sonatype.com/2010/01/how-to-generate-pgp-signatures-with-maven/
   -->
   <profile>
      <id>release-sign-artifacts</id>
      <activation>
         <property>
            <name>release</name>
            <value>true</value>
         </property>
      </activation>
      <build>
         <plugins>
            <plugin>
               <groupId>org.codehaus.mojo</groupId>
               <artifactId>build-helper-maven-plugin</artifactId>
               <version>1.8</version>
               <executions>
                  <execution>
                     <id>attach-artifacts</id>
                     <phase>package</phase>
                     <goals>
                        <goal>attach-artifact</goal>
                     </goals>
                     <configuration>
                        <artifacts>
                           <artifact>
                              <file>${jarprefix}.jar</file>
                              <type>jar</type>
                           </artifact>
                           <artifact>
                              <file>${jarprefix}-javadoc.jar</file>
                              <type>jar</type>
                              <classifier>javadoc</classifier>
                           </artifact>
                           <artifact>
                              <file>${jarprefix}-sources.jar</file>
                              <type>jar</type>
                              <classifier>sources</classifier>
                           </artifact>
                        </artifacts>
                     </configuration>
                  </execution>
               </executions>
            </plugin>
         </plugins>
      </build>
   </profile>
</profiles>

新:

<build>
   <plugins>
      <plugin>
         <groupId>org.codehaus.mojo</groupId>
         <artifactId>build-helper-maven-plugin</artifactId>
         <version>1.8</version>
         <executions>
            <execution>
               <id>attach-artifacts</id>
               <phase>package</phase>
               <goals>
                  <goal>attach-artifact</goal>
               </goals>
               <configuration>
                     <artifact>
                        <file>${jarprefix}.jar</file>
                        <type>jar</type>
                     </artifact>
                     <artifact>
                        <file>${jarprefix}-javadoc.jar</file>
                        <type>jar</type>
                        <classifier>javadoc</classifier>
                     </artifact>
                     <artifact>
                        <file>${jarprefix}-sources.jar</file>
                        <type>jar</type>
                        <classifier>sources</classifier>
                     </artifact>
                  </artifacts>
               </configuration>
            </execution>
         </executions>
      </plugin>
   </plugins>
</build>

<profiles>
   <!--
   This profile will sign the JAR file, sources file, and javadocs file using the GPG key on the local machine.
   See: http://blog.sonatype.com/2010/01/how-to-generate-pgp-signatures-with-maven/
   -->
   <profile>
      <id>release-sign-artifacts</id>
      <activation>
         <property>
            <name>release</name>
            <value>true</value>
         </property>
      </activation>
   </profile>