故事是这样的,昨天有位大佬让我写一个给外部人员调用的api,但是那个项目发布又是内网的,所以让我接口写在一个项目里,而发布给别人用的项目是另一个,于是,就有了下面的故事。
第一次接触,完全不懂
第一步是打包,打包api所在的包就行了,这边配置的是jar,所以打包出的就是jar的形式
我用的是idea里的maven里的 先clean、再compile、再package就好了,至于compil有什么用,忘记了
第二步
如果cmd能执行mvn命令的就可以用cmd直接执行
我用的是idea自带的,点击maven里面的那个字母m
执行:
mvn install:install-file -DgroupId= 1 -DartifactId= 2 -Dversion=3 -Dpackaging=jar -Dfile= 4
替换值 : 1 == api所在的pom.xml里的groupId
2 == consultant_core_api (jar包的名字不带版本)
3 == 1.0.5 (jar的版本)
4 == E:\PlatformConsultant\consultant_core_api\target\consultant_core_api-1.0.5.jar(jar包的本地路径)
第三步
在需要用到的项目里引用这个jar包(如果只是本地用就可以了,如果不止,请把jar发布到远程maven仓库)
pom.xml中引用
<dependency>
<groupId>com.chlitina.cloud</groupId>
<artifactId>consultant_core_api</artifactId>
<version>1.0.5</version>
</dependency>
然后可以在对应的项目maven中去查看,如果有,那么就可以愉快的使用了。实体类,bean这些都不需要打包的。
最后的最后提供一个上传jar包到远程maven仓库的链接,emm虽然我用的不是这个,但是我感觉这个应该有点用:jar包到远程maven仓库
第4步,
每个给别的项目调用 的每个api都需要配置
<dubbo:service interface="com.chlitina.cloud.core.api.PlatformConsultantApi" ref="platformConsultantApi" timeout="10000" protocol="json" group="${dubbo_server_group}"></dubbo:service>
这是提供给别的项目使用要的配置:provider下的spring下的spring-provider.xml里
<!-- 查询配置信息服务 -->
<dubbo:reference id="platfromConfigService"
interface="com.quwei.platform.backstage.service.api.PlatfromConfigService" check="false"
timeout="10000" protocol="json" group="${dubbo.content.group}"/>
这是在调用别的项目api里要的配置:
vshop下的consumers下的_mall.xml里
记录一下:
今天用file -》project Settings -》Modules -》里要用的项目模块,导入的对应jar包,这样的好处是idea里面不会报错,然而,就出现了运行是有些类会找不到org.apache.cxf.transport.AbstractConduit的类文件,经过一番查询,最终,我选择了问别的部门的大佬,然后得到的解释是,这样导入是用的idea的方法,所以它认可,并且不会报错,但是运行的时候要用的maven的方式(我并没有在pom里配置)所以导致运行的时候会找不到这个类,在编译时并用不到这些jar包里的所有类,但是运行时要把所有的类都编译,所以就会出现找不到类的情况,最终在项目的最外围pom里添加:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>wss4j</artifactId>
<version>${wss4j_version}</version>
</dependency>
and版本:
<wss4j_version>1.5.6</wss4j_version>
以及 在需要用到的模块里:
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>wss4j</artifactId>
</dependency>
然后 如果是网上可以下载的只需要点maven自带的刷新就会自动下载了,如果是手写的私人jar包,则需要用到maven里的Execute Maven Goal 执行 上述第二步 。