在GitHub上開了不少坑 堕汞,但為了方便都是直接編寫代碼 玛追。參考了不少優(yōu)秀的作者披诗,除了良好的代碼風(fēng)格之外甲献,項目的描述/構(gòu)建/Issue管理都有很好的規(guī)范宰缤。今年首要目標(biāo)就是完善之前的坑,從項目構(gòu)建開始~
Maven
還是延續(xù)之前的parent-pom/child-jar的結(jié)構(gòu)
- parent中只留配置 : dependencies/plugins 都替換成 management節(jié)點
parent作為一個公共配置 晃洒,包括使用到的dependencies和plugins
- 補(bǔ)充scm/issue等節(jié)點信息 ,供其他工具集成
項目的補(bǔ)充信息
- 增加
source/javadoc
等plugin ,方便第三方使用者使用.
開源項目必備慨灭,當(dāng)然你得在寫代碼時就寫好doc
- 增加代碼掃描工具(最好是通過IDEA的編寫時工具檢測更好)
Sonarlint,阿里編碼規(guī)約球及,前端的有jslint氧骤,編寫時檢測可以盡早提示你修改代碼,也更容易記憶桶略。
新的POM
<?xml version="1.0" encoding="UTF-8"?>
<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>site.koalazoo.cutekoala</groupId>
<artifactId>cute-koala</artifactId>
<version>0.1.0</version>
<packaging>pom</packaging>
<name>Cute Koala</name>
<url>https://github.com/Anddd7/cute-koala</url>
<description>Manage your Java Application easiler.</description>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<issueManagement>
<system>GitHub Issues</system>
<url>https://github.com/Anddd7/cute-koala/issues</url>
</issueManagement>
<inceptionYear>2017</inceptionYear>
<scm>
<connection>scm:git:https://github.com/Anddd7/cute-koala.git</connection>
<developerConnection>scm:git:git@github.com:Anddd7/cute-koala.git</developerConnection>
<url>https://github.com/Anddd7/cute-koala</url>
</scm>
<developers>
<developer>
<id>and777</id>
<name>Eddy Liao</name>
<email>liaoad_space@sina.com</email>
<roles>
<role>owner</role>
<role>developer</role>
</roles>
<timezone>+8</timezone>
</developer>
</developers>
<modules>
<module>koala-core</module>
<module>koala-test</module>
</modules>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.build.jdk.v>1.8</project.build.jdk.v>
<junit.v>4.12</junit.v>
<slf4j-log4j12.v>1.7.5</slf4j-log4j12.v>
<lombok.v>1.16.18</lombok.v>
<fastjson.v>1.2.33</fastjson.v>
<mysql-jdbc.v>6.0.6</mysql-jdbc.v>
<guava.v>22.0</guava.v>
<beetl.v>2.7.16</beetl.v>
<snakeyaml.v>1.18</snakeyaml.v>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-log4j12.v}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.v}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.v}</version>
<scope>provided</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>${project.build.jdk.v}</source>
<target>${project.build.jdk.v}</target>
</configuration>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.10.4</version>
<configuration>
<quiet>true</quiet>
<notimestamp>true</notimestamp>
<additionalparam>-Xdoclint:-html</additionalparam>
<encoding>${project.build.sourceEncoding}</encoding>
<docencoding>${project.build.sourceEncoding}</docencoding>
<charset>${project.build.sourceEncoding}</charset>
<additionalparam>-XDignore.symbol.file</additionalparam>
<additionalparam>-Xdoclint:-html</additionalparam>
<linksource>true</linksource>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.projectlombok</groupId>
<artifactId>lombok-maven-plugin</artifactId>
<version>1.16.18.1</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>delombok</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.7.6.201602180812</version>
<executions>
<execution>
<id>prepare-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eluder.coveralls</groupId>
<artifactId>coveralls-maven-plugin</artifactId>
<version>4.3.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
持續(xù)集成
之前嘗試在阿里云上搭Jenkins ,因為內(nèi)存爆炸(1G) ,以失敗告終.在添加SCM節(jié)點時 ,搜索了一下集成的工具 ,發(fā)現(xiàn)了 Travis CI.
Travis是一個持續(xù)集成的平臺 ,自帶與GitHub的集成 ,能夠檢測代碼提交并觸發(fā)繼承腳本.
- 進(jìn)入官網(wǎng)使用GitHub登錄 ,然后選擇想要繼承的repo
- 在repo下新建
.travis.yml
文件 ,寫入自動集成觸發(fā)的腳本 - push代碼到github ,然后就可以到
travis
首頁查看編譯情況
coveralls是一個測試報告展示平臺 ,能夠集成多種測試報告 .也是在使用travis的時候檢索到的 ,通過travis持續(xù)集成并生成測試報告 ,然后上傳到coveralls .
- 使用GitHub賬號登錄 ,選擇repo
- 復(fù)制repoToken
repoToken是你訪問測試報告的憑證 ,因此不能明文上傳到github上 ,但是我們又需要在CI中使用這個repoToken.
- 加密Token
- 使用travis的對稱加密工具(需要ruby gem工具):
travis encrypt COVERALLS_TOKEN=xxxxxx
- 復(fù)制加密后的token到
.travis.yml
文件中 - 使用變量名訪問
- 使用travis的對稱加密工具(需要ruby gem工具):
- 在travis腳本中使用token和測試報告生成工具
- 生成并上傳測試報告
Java項目官方推薦了一個plugin使用 ,token不能使用明文 ,所以不能直接把token配置在pom中.而是在travis集成時 ,把解密后的token拿來使用.
在子項目中使用插件
<build>
<plugins>
<!-- 直接引用parent中配置好的plugin -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.eluder.coveralls</groupId>
<artifactId>coveralls-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
.travis.yml的配置
language: java
sudo: false
script: mvn clean verify
after_success:
- mvn clean test
## 生成測試報告
- mvn jacoco:report
## 獲取travis解密的token ,并調(diào)用coveralls-plugin上傳報告
- mvn coveralls:report -DrepoToken="${COVERALLS_TOKEN}"
## 加密后的token字串
env:
global:
- secure: "..............................."
這里是借助了travis的對稱加密:把 coveralls上獲取的倉庫token加密后放到travis配置文件中语淘。當(dāng)travis平臺運(yùn)行時,會把配置文件中的密文都解密出來际歼,其他配置(比如腳本)中就可以訪問到當(dāng)時加密的變量惶翻。
然后我再把token變量通過maven腳本傳遞到plugin中,就可以實現(xiàn)上傳report而不暴露明文的token了鹅心。
最后
就可以在主頁上看到持續(xù)集成和測試報告的結(jié)果 ,還可以導(dǎo)入非常有逼格的budge(主要目的)