maven工程打包,并给其他项目调用

用maven新建了一个查询数据库的项目,导入了mybatis依赖。
pom.xml

    <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.4.5</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.40</version>
    </dependency>

写了测试类,确实可以从数据库中取到数据。
然后用maven install打包,获得jar。再在另一个工程里加入这个包,build path。
然后使用其中的方法,报找不到mybatis包的错误。

public class Test {
    public static void main(String[] args) {
        DataSource d=new DataSource();
    }
}

 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/ibatis/io/Resources
    at com.sunyard.backer.SessionUtil.<clinit>(SessionUtil.java:21)
    at com.sunyard.backer.controller.DataSource.<clinit>(DataSource.java:19)
    at com.sunyard.test.Test.main(Test.java:7)
    

应该是maven打jar的时候依赖的包没有打进去吧?本来最开始是要打jar然后放在目录里在反射调用其获取数据的方法的,结果报错。然后尝试直接导入build path也报错。请问maven项目该如何打包才可以把pom.xml中依赖的包都打进去?

阅读 6.5k
2 个回答

原来打出来有两个jar包,一个是带依赖的,一个是不带依赖的。。。
用带依赖的就可以了。
粗心了。。。

clipboard.png

你使用的工程也使用maven就可以啦,会自动解决需要依赖的jar,如果你想把所有依赖都打到一个jar里,可以使用assembly插件,在pom.xml里加入:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </plugin>
  </plugins>
</build>

然后:

mvn clean compile assembly:single
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题