3

我需要在 Maven/Nexus 中存储一个工件,但是当它被拉下时,它最后不能有版本号。

在你责备我之前,把你的怒容指向甲骨文。

我有comm.jar(Oracle 通信端口驱动程序)。我已经把它放在我的 nexus 服务器中,它降为comm-1.0.jar. 但是 JAR 包含以下代码:

if(streamtokenizer.ttype == -3 
    && (i = streamtokenizer.sval.indexOf("comm.jar")) != -1)

使用它自己的名字来知道在哪里可以找到它的配置文件是硬编码的。jar 已签名,因此我无法对其进行更改。

那么......我如何在 Nexus 中存储一个罐子并且上面没有分机号?


这不是我问题的确切答案,但它确实解决了我的问题。

我将我的 jar 称为“comm.jar-1.0.2.jar” 代码在文件名中查找“comm.jar”,所以现在它找到了!好的,所以这是一个软糖,我很幸运内部代码只是在寻找 indexOf。但它有效!

感谢大家对此的建议!

杰夫

4

2 回答 2

4

这不是一个完整的答案,更多的是关于如何处理这个问题的想法。

我认为您需要使用存在的版本号声明您的依赖关系,以确保 Maven 乐于解决工件并构建它。因此,诀窍是确保在将它捆绑到您的成品中之前对其进行重命名。

Mavendependency:copy-dependencies目标有一个stripVersion可能有用的参数。我怀疑您可以使用它来正确重命名 JAR,也许作为程序集的一部分(确保将依赖关系移动到属于类路径的目录)。

但是,这样的计划很可能会破坏您的开发环境。也许您可以通过使用正确名称伪造 JAR 文件来解决这个问题?

于 2012-11-14T11:59:43.900 回答
1

如果您希望它与战争项目一起使用,那么您可以使用文件名映射来剥离版本。

<build>
    <plugins>
        <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.3</version>
            <configuration>
                <outputFileNameMapping>@{artifactId}@.@{extension}@</outputFileNameMapping>
            </configuration>
        </plugin>
    </plugins>
</build>

依赖的 jar 将正常结束,WEB-INF/lib但现在没有版本。

但是从你的问题很难说出你的最终产品是什么,war,jar,zip,......

于 2012-11-14T14:05:53.127 回答