Implements task-20596: use metrics-base and reduced build.xml,

added executable bootstrap script, removed metrics_checks.xml.
This commit is contained in:
iwakeh 2016-12-26 13:20:49 +01:00 committed by Karsten Loesing
parent b7f1fb3b94
commit a3e0928845
6 changed files with 36 additions and 537 deletions

3
.gitmodules vendored
View File

@ -0,0 +1,3 @@
[submodule "src/build"]
path = src/build
url = https://git.torproject.org/metrics-base

318
build.xml
View File

@ -1,30 +1,19 @@
<project default="compile" name="CollecTor" basedir="."> <?xml version="1.0"?>
<!DOCTYPE project [
<!ENTITY base SYSTEM "src/build/java/base.xml">
]>
<project default="usage" name="collector" basedir=".">
<property name="javadoc-title" value="CollecTor API Documentation"/>
<property name="implementation-title" value="CollecTor" />
<property name="release.version" value="1.1.2-dev" /> <property name="release.version" value="1.1.2-dev" />
<property name="name" value="CollecTor"/> <property name="project-main-class" value="org.torproject.collector.Main" />
<property name="name" value="collector"/>
<property name="descriptorversion" value="1.5.0" /> <property name="descriptorversion" value="1.5.0" />
<property name="source-and-target-java-version" value="1.7" /> <property name="jarincludes" value="collector.properties logback.xml" />
<property name="sources" value="src/main/java"/>
<property name="resources" value="src/main/resources/"/>
<property name="webappsources" value="src/main/webapp"/>
<property name="generated" value="generated"/>
<property name="dist" value="${generated}/dist"/>
<property name="signed" value="${dist}/signed"/>
<property name="testresult" value="${generated}/test-results"/>
<property name="testsources" value="src/test/java"/>
<property name="testresources" value="src/test/resources/"/>
<property name="coverageresult" value="${generated}/coverage-report/"/>
<property name="instrument" value="${generated}/instrument/"/>
<property name="classes" value="${generated}/classes/"/>
<property name="testclasses" value="${generated}/testclasses/"/>
<property name="docs" value="${generated}/javadoc/"/>
<property name="libs" value="lib"/>
<property name="cobertura.ser.file" value="${basedir}/cobertura.ser" />
<property name="jarfile" value="collector-${release.version}.jar" />
<property name="jarsourcesfile" value="collector-${release.version}-sources.jar" />
<property name="jarjavadocfile" value="collector-${release.version}-javadoc.jar" />
<property name="release.tarball"
value="${dist}/collector-${release.version}.tar.gz" />
<property file="build.properties" />
<patternset id="runtime" > <patternset id="runtime" >
<include name="commons-codec-1.9.jar"/> <include name="commons-codec-1.9.jar"/>
<include name="commons-compress-1.9.jar"/> <include name="commons-compress-1.9.jar"/>
@ -35,264 +24,8 @@
<include name="logback-classic-1.1.2.jar" /> <include name="logback-classic-1.1.2.jar" />
<include name="slf4j-api-1.7.7.jar" /> <include name="slf4j-api-1.7.7.jar" />
</patternset> </patternset>
<path id="classpath">
<pathelement path="${classes}"/> <target name="coverage-check">
<fileset dir="${libs}">
<patternset refid="runtime" />
</fileset>
</path>
<path id="checkstyle.classpath" >
<fileset dir="${libs}">
<include name="checkstyle-6.17-all.jar" />
</fileset>
</path>
<path id="cobertura.classpath">
<fileset dir="${libs}">
<include name="descriptor-${descriptorversion}.jar"/>
<include name="cobertura-2.1.1.jar" />
<include name="slf4j-api-1.7.7.jar" />
<include name="commons-lang3-3.3.2.jar" />
<include name="asm4-5.0.3.jar" />
<include name="asm4-util-5.0.3.jar" />
<include name="asm4-tree-5.0.3.jar" />
<include name="asm4-commons-5.0.3.jar" />
<include name="asm4-analysis-5.0.3.jar" />
<include name="oro-2.0.8.jar" />
<include name="logback-core-1.1.2.jar" />
<include name="logback-classic-1.1.2.jar" />
</fileset>
</path>
<path id="cobertura.test.classpath">
<path location="${instrument}" />
<path refid="test.classpath" />
<path refid="cobertura.classpath" />
</path>
<path id="test.classpath">
<pathelement path="${classes}"/>
<pathelement path="${testclasses}"/>
<pathelement path="${resources}"/>
<pathelement path="${testresources}"/>
<fileset dir="${libs}">
<patternset refid="runtime" />
</fileset>
<fileset dir="${libs}">
<include name="junit4-4.11.jar"/>
<include name="hamcrest-all-1.3.jar"/>
</fileset>
</path>
<target name="init">
<mkdir dir="${classes}"/>
<mkdir dir="${testclasses}"/>
<mkdir dir="${docs}"/>
<mkdir dir="${testresult}"/>
<mkdir dir="${instrument}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${signed}"/>
</target>
<target name="clean">
<delete includeEmptyDirs="true" quiet="true">
<fileset dir="${generated}" defaultexcludes="false" includes="**" />
</delete>
<delete file="${cobertura.ser.file}" quiet="true"/>
</target>
<target name="compile" depends="init">
<javac srcdir="${sources}"
destdir="${classes}"
source="${source-and-target-java-version}"
target="${source-and-target-java-version}"
debug="true" debuglevel="lines,source"
deprecation="true"
optimize="false"
failonerror="true"
includeantruntime="false">
<classpath refid="classpath"/>
</javac>
</target>
<target name="compile-tests" depends="compile">
<javac destdir="${testclasses}"
srcdir="${testsources}"
source="${source-and-target-java-version}"
target="${source-and-target-java-version}"
debug="true" debuglevel="lines,source"
deprecation="true"
optimize="false"
failonerror="true"
includeantruntime="false">
<classpath refid="classpath"/>
<classpath refid="test.classpath"/>
</javac>
</target>
<target name="docs">
<mkdir dir="${docs}"/>
<javadoc destdir="${docs}"
footer="&amp;copy; 2016 The Tor Project"
doctitle="CollecTor Documentation"
use="true"
windowtitle="CollecTor Documentation">
<classpath refid="classpath"/>
<fileset dir="${sources}/" includes="**/*.java" />
</javadoc>
</target>
<target name="jar" depends="compile,docs">
<exec executable="git" outputproperty="git.revision">
<arg value="rev-parse" />
<arg value="--short" />
<arg value="HEAD" />
</exec>
<jar destfile="${dist}/${jarfile}"
basedir="${classes}">
<fileset dir="${resources}" >
<include name="collector.properties"/>
<include name="logback.xml"/>
</fileset>
<restrict>
<not>
<name name="META-INF/*" />
</not>
<archives>
<zips>
<fileset dir="${libs}">
<patternset refid="runtime" />
</fileset>
</zips>
</archives>
</restrict>
<manifest>
<attribute name="Created-By" value="The Tor Project" />
<attribute name="Implementation-Title" value="${name}"/>
<attribute name="Implementation-Version"
value="${release.version}-${git.revision}"/>
<attribute name="Main-Class"
value="org.torproject.collector.Main" />
</manifest>
</jar>
<jar destfile="${dist}/${jarsourcesfile}">
<fileset dir="${sources}" />
<fileset dir="${testsources}" />
<manifest>
<attribute name="Created-By" value="The Tor Project" />
<attribute name="Implementation-Title" value="${name}"/>
<attribute name="Implementation-Version"
value="${release.version}-${git.revision}"/>
</manifest>
</jar>
<jar destfile="${dist}/${jarjavadocfile}">
<fileset dir="${docs}" />
<manifest>
<attribute name="Created-By" value="The Tor Project" />
<attribute name="Implementation-Title" value="${name}"/>
<attribute name="Implementation-Version"
value="${release.version}-${git.revision}"/>
</manifest>
</jar>
</target>
<target name="signjar" depends="jar">
<signjar alias="${jarsigner.alias}"
storepass="${jarsigner.storepass}"
sigalg="SHA256withRSA"
destdir="${signed}"
digestalg="SHA-256"
tsaurl="http://timestamp.digicert.com">
<path>
<fileset dir="${dist}"
includes="${jarfile} ${jarsourcesfile} ${jarjavadocfile}"/>
</path>
</signjar>
<fail message="Signing failed." >
<condition>
<not>
<and>
<issigned file="${signed}/${jarfile}"/>
<issigned file="${signed}/${jarsourcesfile}"/>
<issigned file="${signed}/${jarjavadocfile}"/>
</and>
</not>
</condition>
</fail>
</target>
<target name="tar" depends="signjar">
<tar destfile="${release.tarball}" compression="gzip">
<tarfileset dir="." prefix="collector-${release.version}">
<include name="${signed}/${jarfile}" />
<include name="${signed}/${jarsourcesfile}" />
<include name="${signed}/${jarjavadocfile}" />
<include name="build.xml" />
<include name="LICENSE" />
<include name="CERT" />
<include name="*.md" />
</tarfileset>
<tarfileset dir="${sources}"
prefix="collector-${release.version}/${sources}" />
<tarfileset dir="${resources}"
prefix="collector-${release.version}/${resources}" />
<tarfileset dir="${webappsources}"
prefix="collector-${release.version}/${webappsources}" />
<tarfileset dir="${testsources}"
prefix="collector-${release.version}/${testsources}" />
<tarfileset dir="${testresources}"
prefix="collector-${release.version}/${testresources}" />
<tarfileset dir="${libs}"
prefix="collector-${release.version}/${libs}" />
</tar>
</target>
<taskdef resource="com/puppycrawl/tools/checkstyle/ant/checkstyle-ant-task.properties">
<classpath refid="checkstyle.classpath" />
</taskdef>
<target name="checks" depends="compile,compile-tests">
<checkstyle config="${testresources}/metrics_checks.xml">
<fileset dir="${testsources}"
includes="**/*.java" />
<fileset dir="${sources}"
includes="**/*.java" />
<classpath>
<path refid="classpath" />
<path refid="checkstyle.classpath" />
</classpath>
<formatter type="plain"
toFile="${generated}/checkstyle_report.txt"/>
</checkstyle>
<exec executable="cat" outputproperty="checkstyle.result">
<arg value="${generated}/checkstyle_report.txt" />
</exec>
<fail message="Checkstyle complaints: ${checkstyle.result}" >
<condition>
<not>
<length string="${checkstyle.result}"
length="29" />
</not>
</condition>
</fail>
</target>
<taskdef classpathref="cobertura.classpath" resource="tasks.properties" />
<target name="coverage" depends="compile,compile-tests">
<copy todir="${instrument}" >
<fileset dir="${classes}" >
<include name="**/*"/>
</fileset>
</copy>
<cobertura-instrument ignoreTrivial="true">
<fileset dir="${instrument}">
<include name="**/**/*.class" />
</fileset>
</cobertura-instrument>
<junit fork="true" haltonfailure="false" printsummary="on">
<sysproperty key="net.sourceforge.cobertura.datafile"
file="${cobertura.ser.file}" />
<!-- The following jvmargs prevent test access to the network. -->
<jvmarg value="-Djava.security.policy=${testresources}/junittest.policy"/>
<jvmarg value="-Djava.security.manager"/>
<jvmarg value="-DLOGBASE=${generated}/testcoverage-logs"/>
<classpath refid="cobertura.test.classpath" />
<formatter type="xml" />
<batchtest toDir="${testresult}" >
<fileset dir="${testclasses}" includes="**/*Test.class" />
</batchtest>
</junit>
<cobertura-report format="html" destdir="${coverageresult}" >
<fileset dir="${sources}">
<include name="**/*.java" />
</fileset>
</cobertura-report>
<cobertura-check totallinerate="31" totalbranchrate="26" > <cobertura-check totallinerate="31" totalbranchrate="26" >
<regex pattern="org.torproject.collector.bridgedescs" <regex pattern="org.torproject.collector.bridgedescs"
branchrate="87" linerate="73"/> branchrate="87" linerate="73"/>
@ -304,18 +37,11 @@
branchrate="100" linerate="91" /> branchrate="100" linerate="91" />
</cobertura-check> </cobertura-check>
</target> </target>
<target name="test" depends="compile,compile-tests">
<junit fork="true" haltonfailure="true" printsummary="off"> <!-- The following line adds the common targets and properties
<!-- The following two jvmargs prevent test access to the network. --> for Metrics' Java Projects.
<jvmarg value="-Djava.security.policy=${testresources}/junittest.policy"/> -->
<jvmarg value="-Djava.security.manager"/> &base;
<jvmarg value="-DLOGBASE=${generated}/test-logs"/>
<classpath refid="test.classpath"/>
<formatter type="plain" usefile="false"/>
<batchtest>
<fileset dir="${testclasses}" includes="**/*Test.class" />
</batchtest>
</junit>
</target>
</project> </project>

1
src/build Submodule

@ -0,0 +1 @@
Subproject commit 7a01d68f813cb5ae2904e73dbc81999ce0622eca

View File

@ -0,0 +1,10 @@
#!/bin/sh
#
# Copyright 2016 The Tor Project
# See LICENSE for licensing information
#
# Use for submodule initialization and checkout.
# Only necessary after very first checkout without recursion.
#
git submodule update --init --remote

View File

@ -1,17 +0,0 @@
/* Prevent tests from bothering production servers. */
grant {
permission java.io.FilePermission "<<ALL FILES>>", "read, write, delete, execute";
permission java.util.PropertyPermission "*", "read, write";
permission java.lang.RuntimePermission "setIO";
permission java.lang.RuntimePermission "accessClassInPackage.sun.nio.fs";
permission java.lang.RuntimePermission "accessDeclaredMembers";
permission java.lang.RuntimePermission "getFileStoreAttributes";
permission java.lang.RuntimePermission "getStackTrace";
permission java.lang.RuntimePermission "modifyThread";
permission java.lang.reflect.ReflectPermission "suppressAccessChecks";
permission java.lang.RuntimePermission "shutdownHooks";
permission java.lang.RuntimePermission "accessClassInPackage.sun.reflect";
permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.protocol.http";
permission java.lang.RuntimePermission "accessClassInPackage.sun.net.www.http";
};

View File

@ -1,224 +0,0 @@
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<!--
Checkstyle configuration that checks the Google coding conventions from Google Java Style
that can be found at https://google.github.io/styleguide/javaguide.html with the following
modifications:
- Replaced com.google with org.torproject in import statement ordering
[CustomImportOrder].
- Relaxed requirement that catch parameters must be at least two
characters long [CatchParameterName].
- Enabled suppression of warnings using annotations.
- Added a check for unused imports [UnusedImports].
Checkstyle is very configurable. Be sure to read the documentation at
http://checkstyle.sf.net (or in your downloaded distribution).
To completely disable a check, just comment it out or delete it from the file.
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
-->
<module name = "Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="warning"/>
<property name="fileExtensions" value="java, properties, xml"/>
<!-- Checks for whitespace -->
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>
<module name="SuppressWarningsFilter" />
<module name="TreeWalker">
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
<property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message" value="Avoid using corresponding octal or Unicode escape."/>
</module>
<module name="AvoidEscapedUnicodeCharacters">
<property name="allowEscapesForControlCharacters" value="true"/>
<property name="allowByTailComment" value="true"/>
<property name="allowNonPrintableEscapes" value="true"/>
</module>
<module name="LineLength">
<property name="max" value="100"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<module name="AvoidStarImport"/>
<module name="OneTopLevelClass"/>
<module name="NoLineWrap"/>
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<module name="NeedBraces"/>
<module name="UnusedImports"/>
<module name="LeftCurly">
<property name="maxLineLength" value="100"/>
</module>
<module name="RightCurly"/>
<module name="RightCurly">
<property name="option" value="alone"/>
<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/>
</module>
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<message key="ws.notFollowed"
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
<message key="ws.notPreceded"
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
</module>
<module name="OneStatementPerLine"/>
<module name="MultipleVariableDeclarations"/>
<module name="ArrayTypeStyle"/>
<module name="MissingSwitchDefault"/>
<module name="FallThrough"/>
<module name="UpperEll"/>
<module name="ModifierOrder"/>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
</module>
<module name="SeparatorWrap">
<property name="tokens" value="DOT"/>
<property name="option" value="nl"/>
</module>
<module name="SeparatorWrap">
<property name="tokens" value="COMMA"/>
<property name="option" value="EOL"/>
</module>
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="TypeName">
<message key="name.invalidPattern"
value="Type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MemberName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Member name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ParameterName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="CatchParameterName">
<property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="LocalVariableName">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<property name="allowOneCharVarInForLoop" value="true"/>
<message key="name.invalidPattern"
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="MethodTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="InterfaceTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="NoFinalizer"/>
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<module name="Indentation">
<property name="basicOffset" value="2"/>
<property name="braceAdjustment" value="0"/>
<property name="caseIndent" value="2"/>
<property name="throwsIndent" value="4"/>
<property name="lineWrappingIndentation" value="4"/>
<property name="arrayInitIndent" value="2"/>
</module>
<module name="AbbreviationAsWordInName">
<property name="ignoreFinal" value="false"/>
<property name="allowedAbbreviationLength" value="1"/>
</module>
<module name="OverloadMethodsDeclarationOrder"/>
<module name="VariableDeclarationUsageDistance"/>
<module name="CustomImportOrder">
<property name="specialImportsRegExp" value="org.torproject"/>
<property name="sortImportsInGroupAlphabetically" value="true"/>
<property name="customImportOrderRules" value="STATIC###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE"/>
</module>
<module name="MethodParamPad"/>
<module name="OperatorWrap">
<property name="option" value="NL"/>
<property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/>
</module>
<module name="AnnotationLocation">
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
</module>
<module name="AnnotationLocation">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="allowSamelineMultipleAnnotations" value="true"/>
</module>
<module name="NonEmptyAtclauseDescription"/>
<module name="JavadocTagContinuationIndentation"/>
<module name="SummaryJavadoc">
<property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
</module>
<module name="JavadocParagraph"/>
<module name="AtclauseOrder">
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
</module>
<module name="JavadocMethod">
<property name="scope" value="public"/>
<property name="allowMissingParamTags" value="true"/>
<property name="allowMissingThrowsTags" value="true"/>
<property name="allowMissingReturnTag" value="true"/>
<property name="minLineCount" value="2"/>
<property name="allowedAnnotations" value="Override, Test"/>
<property name="allowThrowsTagsForSubclasses" value="true"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="SingleLineJavadoc">
<property name="ignoreInlineTags" value="false"/>
</module>
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
<module name="CommentsIndentation"/>
<module name="SuppressWarningsHolder" />
</module>
</module>