如何使用maven为特定操作系统构建jar?

时间:2016-11-10 19:53:08

标签: java eclipse maven tensorflow bytecode

我正在使用maven for Eclipse来构建一个可以在远程服务器上运行的jar。我的系统正在运行OS X,服务器正在运行CestOS。 对于该项目,我需要tensorflow library。 Maven成功解析了依赖关系,因此我可以在本地运行该项目。但是,在服务器上我收到的错误是tensorflow库不存在,因为默认情况下maven仅包含macosx版本。如何在构建期间强制maven用linux版本替换macosx版本的tensorflow?

可以找到不同平台的TensorFlow java库here

P.S。我已经尝试在pom中添加一个依赖项,系统范围指向jar。

3 个答案:

答案 0 :(得分:0)

在你的POM中试试这个:

<dependency>
    <groupId>org.bytedeco.javacpp-presets</groupId>
    <artifactId>tensorflow</artifactId>
    <version>0.9.0-1.2</version>
</dependency>
<dependency>
    <groupId>org.bytedeco.javacpp-presets</groupId>
    <artifactId>tensorflow</artifactId>
    <version>0.9.0-1.2</version>
    <classifier>linux-x86_64</classifier>
</dependency>

linux-x86,如果您的服务器是32位。

当然,使用配置文件定义条件依赖项会很不错。

答案 1 :(得分:0)

根据您链接的页面上的jar名称判断,MacO和Linux版本之间的区别在于jar名称version部分之后的文本。

这称为classifier(参见Maven coordinates),是一个可选坐标,在工件版本之后提供额外的区别。

正如nandsito已经建议的那样,为了扩展其答案,试试这个(未经测试,让我知道,我会更新):

<profiles>
    <profile>
        <id>osx</id>

        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tensorflow</artifactId>
            <version>0.9.0-1.2</version>
            <classifier>macosx-x86_64</classifier>
        </dependency>

    </profile>

    <profile>
        <id>linux</id>

        <dependency>
            <groupId>org.bytedeco.javacpp-presets</groupId>
            <artifactId>tensorflow</artifactId>
            <version>0.9.0-1.2</version>
            <classifier>linux-x86_64</classifier>
        </dependency>

    </profile>

</profiles>

并删除POM中所有相关的<dependency>个节点(这样,如果没有<profiles>部分,就不会对tensorflow有依赖。

在此更改之后,您必须每次都指定一个配置文件(因为POM中不存在tensorflow依赖关系):在MacOs mvn clean package -Pmacos上准备包时以及在Centos上准备包时{{ 1}}

Eclipse允许您在mvn clean package -Plinux&gt;下设置活动配置文件列表Project properties(您可以通过右键单击Maven中的项目文件夹来访问此窗口。

答案 2 :(得分:0)

我认为您必须设置一个构建系统,例如 Jenkins,并为每个目标环境/平台进行配置。在为 Linux 构建时,配置构建系统运行此命令 mvn clean package -Djavacpp.platform=linux-x86_64,这里的关键是参数 -Djavacpp.platform,根据您的目标平台进行更改。