【问题标题】:Maven: How to package local jar into final jar?Maven:如何将本地 jar 打包到最终 jar 中?
【发布时间】:2019-01-23 10:08:58
【问题描述】:

我有一个 eclipse-maven 项目。
我需要将我的本地 ojdbc7.jar 打包到我的最终 jar 中。
我能够将可下载的依赖项打包到最终的 jar 中,但无法将本地 jar 打包到最终的 jar 中,因为在其 <dependency> 中添加了<scope>system</scope>
这是 POM.xml:

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.comcast.mongo</groupId>
  <artifactId>MongoRead</artifactId>
  <version>0.1</version>

    <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
             <groupId>org.apache.spark</groupId>
             <artifactId>spark-sql_2.11</artifactId>
             <version>2.2.0</version>
         </dependency>

        <dependency>
            <groupId>org.scala-lang</groupId>
            <artifactId>scala-library</artifactId>
            <version>2.11.8</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.mongodb.spark</groupId>
            <artifactId>mongo-spark-connector_2.11</artifactId>
            <version>2.2.0</version>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
            <version>2.3</version>
        </dependency>
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc</artifactId>
            <version>7</version>
            <scope>system</scope>
            <systemPath>${basedir}/ojdbc-7.jar</systemPath>
        </dependency>
        <dependency>
            <groupId>org.clojure</groupId>
            <artifactId>java.jdbc</artifactId>
            <version>0.7.0</version>
        </dependency>

    </dependencies>


    <build>
    <plugins>
      <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2.1</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id> 
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
  </build>

</project>

我已经为那些不需要打包到最终 jar 中的依赖项提供了 &lt;scope&gt;provided&lt;/scope&gt;。但是因为&lt;scope&gt;system&lt;/scope&gt;需要为&lt;systemPath&gt;设置,所以我无法将这个本地jar打包到final jar中。
请建议我该怎么做?

【问题讨论】:

    标签: java eclipse maven maven-2 m2eclipse


    【解决方案1】:

    您可以将您的 ojdbc 库安装到您的 maven 存储库中,然后它将与您的其他库一样工作。

    假设您在 jar 的同一位置启动此命令:

    mvn install:install-file -Dfile=ojdbc-7.jar -Dpackaging=jar -DgroupId=com.oracle -DartifactId=ojdbc -Dversion=7
    

    在你的 POM 中,更新为:

    <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc</artifactId>
            <version>7</version>
        </dependency>
    

    【讨论】:

    • 我做到了。然后我跑了mvn clean package。它没有帮助。我仍然无法在最终 jar 中找到 ojdbc7 依赖项。 :(
    • 你修改你的 pom 来匹配这个吗? com.oracleojdbc7​​
    • 是啊!!!!……你说的太对了!……它奏效了。我删除了&lt;scope&gt;.....&lt;systemPath&gt;...。 @Albaku 你摇滚!!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多