在maven存储库中,我有一个eclipse插件,我需要它才能创建一个功能。本地依赖项test.branding.plugin
已签名,但从nexus test.plugin.nexus
下载的内容不是。
这就是我在父pom.xml中定义依赖关系的方法
<dependencies>
<dependency>
<groupId>test.plugin</groupId>
<artifactId>nexus</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
这是pom.xml文件的其余部分。
<modules>
<module>../test.feature</module>
<module>../test.branding.plugin</module>
<module>../test.p2</module>
</modules>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-maven-plugin</artifactId>
<version>${tycho-version}</version>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-plugin</artifactId>
<version>${tycho-version}</version>
</plugin>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>target-platform-configuration</artifactId>
<version>${tycho-version}</version>
<configuration>
<resolver>p2</resolver>
<environments>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86</arch>
</environment>
<environment>
<os>linux</os>
<ws>gtk</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86_64</arch>
</environment>
<environment>
<os>win32</os>
<ws>win32</ws>
<arch>x86</arch>
</environment>
<environment>
<os>macosx</os>
<ws>cocoa</ws>
<arch>x86_64</arch>
</environment>
</environments>
<allowConflictingDependencies>true</allowConflictingDependencies>
<pomDependencies>consider</pomDependencies>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<keystore>../test.parent/cert.jks</keystore>
<storepass>storepass</storepass>
<alias>alias</alias>
<keypass>keypass</keypass>
<arguments>
<argument>-sigalg</argument>
<argument>MD5withRSA</argument>
<argument>-digestalg</argument>
<argument>SHA1</argument>
</arguments>
</configuration>
<executions>
<execution>
<id>sign</id>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-packaging-plugin</artifactId>
<version>${tycho-version}</version>
<configuration>
<format>yyyyMMdd-HHmm</format>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
有什么想法吗?
答案 0 :(得分:1)
您可以通过解决方法执行此操作。如果您将jarsigner放入正常的生命周期,它只会签署模块的工件。
然而,您可以将jarsigner插件放入您的p2模块,然后在压缩p2存储库之前对所有jar进行retroactivly签名。
为了实现此目的,您必须在jarsigner:sign
和tycho-p2-repository-plugin:assemble-repository
之间输入tycho-p2-repository-plugin:archive-repository
,即在创建p2之后,但在压缩之前。由于两个目标都在同一阶段运行,因此需要一个技巧:
您需要将tycho-p2-repository-plugin:assemble-repository
移至早期阶段(prepare-package
)。
看一下这个例子:
<plugin>
<groupId>org.eclipse.tycho</groupId>
<artifactId>tycho-p2-repository-plugin</artifactId>
<version>${tycho-version}</version>
<executions>
<execution>
<id>default-assemble-repository</id>
<!-- execute the assemble step in prepare-package -->
<phase>prepare-package</phase>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jarsigner-plugin</artifactId>
<version>1.3.1</version>
<configuration>
<keystore>../test.parent/cert.jks</keystore>
<storepass>storepass</storepass>
<alias>alias</alias>
<keypass>keypass</keypass>
<arguments>
<argument>-sigalg</argument>
<argument>MD5withRSA</argument>
<argument>-digestalg</argument>
<argument>SHA1</argument>
</arguments>
<archiveDirectory>${project.build.directory}/repository</archiveDirectory>
<includes>
<include>features/*.jar</include>
<!-- potentially only sign specific plugins -->
<include>plugins/*.jar</include>
</includes>
</configuration>
<executions>
<execution>
<id>sign</id>
<phase>prepare-package</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
结果是一个包含所有jar的zip文件。
然而,有一个小警告:
由于签名,工件的大小会增加,但artifacts.jar中的相关大小属性不会被调整。这当前没有任何效果(它仅用于在特殊情况下生成下载进度条),但可能导致使用未来的p2实现时出现问题。
<强>更新强>
似乎已知错误校验和的问题(参见:https://bugs.eclipse.org/bugs/show_bug.cgi?id=347041)。
尝试使用eclipse-maven-signing-plugin
进行所有必要的解包和调整:
<plugin>
<!-- <groupId>org.eclipse.dash.maven</groupId> -->
<groupId>org.eclipse.jetty.toolchain</groupId>
<artifactId>eclipse-signing-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<id>fixMD5Sums</id>
<phase>package</phase>
<goals>
<goal>fixCheckSums</goal>
</goals>
<configuration>
<inputFile>${project.build.directory}/${project.build.finalName}.zip</inputFile>
</configuration>
</execution>
</executions>
</plugin>
这似乎有些过时,但仍然有效。 Eclipse-maven-signing-plugin似乎也能够完成整个签名过程,但这需要进一步调查。