看了一遍《maven权威指南》,对着titan-0.5.4的源码琢磨了一下。代码没仔细看,撸了一遍pom.xml文件。
以下是我get到的技能:
1.多模块
titan-0.5.4
titan-all
titan-berkeleyje
titan-cassandra
titan-core
titan-dist
titan-dist-hadoop-1
titan-dist-hadoop-2
titan-es
titan-hadoop-parent
titan-hadoop
titan-hadoop-1
titan-hadoop-2
titan-hadoop-core
titan-hbase-parent
titan-hbase
titan-hbase-094
titan-hbase-096
titan-hbase-098
titan-hbase-core
titan-lucene
titan-rexster
titan-solr
titan-test
titan-all:
没有什么实质的作用。titan-all里引用了titan这个项目的其他模块。
假如我有一个模块引用了好几个其它的模块,我不想写那么多<dependency>怎么办?
把这些依赖放到titan-all里,然后只引用titan-all这一个”jar“就好了。
titan-dist:
这个是为了发布的时候用的。注意titan-dist里引用了titan-all。
titan-hbase-0.9.x:
hbase0.94对应haddoop1, hbase0.96,hbase0.98对应hadoop2。由pom的<profile>里的<activeByDefault>true</activeByDefault>明确指出
titan-hbase:
就是把titan-hbase-parent下其他模块的代码都整到一个jar包里。看下图。
titan-hadoop:
就是把titan-hadoop-parent下其他模块的代码都整到一个jar包里。看下图。
titan-hbase-parent和titan-hadoop-parent:
就是一个空壳子。
titan-core里用到了titan-hbase和titan-solr模块里的东西,可是titan-core里并没有依赖titan-hbase和titan-solr。这怎么回事?
titan-core里通过反射类全名来使用titan-hbase和titan-solr模块下的东西。
HBASE("com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager", "hbase"),
"com.thinkaurelius.titan.diskstorage.solr.SolrIndex",
2.抽取共通 ①父pom.xml里定义的东西,子pom.xml可以继承过来。比如父pom.xml里定义的属性,再比如<pluginManagement>的使用。②titan-all模块
3.profile 根据不同的需要编译不同的版本。注意profile有几种不同的激活条件。如果您不了解,强烈建议百度一下。
4.maven-shade-plugin 解决jar包冲突问题。这就厉害了,也非常实用,这个我是看了《OReilly.Learning.Spark.Lightning-Fast.Big.Data.Analysis》这本书之后才知道的。
假如A依赖C.1,B依赖C.2。 显然C.1版本比较旧怎么办? 用maven-shade-plugin这个插件,它会把包名重新命名。说实话我没用过。强烈建议试试。
看看titan三百多个jar包啊。简直就是jar hell。但是这么多jar包人家就能很好的解决冲突问题。
5.pom.xml报错问题。pom.xml里报的错有的是m2eclipse插件的问题。并不是你写错了。 这就需要你了解maven里各种phase。