pom.xml
<?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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>dpc-api</module>
<module>dpc-queue</module>
<module>dpc-aggregation</module>
<module>dpc-attribution</module>
<module>dpc-common</module>
<module>dpc-consent</module>
<module>dpc-bluebutton</module>
<module>dpc-macaroons</module>
<module>dpc-smoketest</module>
<module>dpc-testing</module>
</modules>
<groupId>gov.cms.dpc</groupId>
<artifactId>dpc-app</artifactId>
<version>0.4.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>DPC Application</name>
<url>https://github.com/CMSgov/dpc-app</url>
<scm>
<connection>scm:git:git@github.com:CMSGov/dpc-app.git</connection>
<url>scm:git:git@github.com:CMSGov/dpc-app.git</url>
<developerConnection>scm:git:git@github.com:CMSGov/dpc-app.git</developerConnection>
</scm>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<dropwizard.version>3.0.7</dropwizard.version>
<junit.jupiter.version>5.10.2</junit.jupiter.version>
<slf4j.version>2.0.12</slf4j.version>
<hapi.fhir.groupID>ca.uhn.hapi.fhir</hapi.fhir.groupID>
<hapi.fhir.version>4.2.0</hapi.fhir.version>
<pgsql.version>42.7.2</pgsql.version>
<java.version>11</java.version>
<jib.container.appRoot>/app</jib.container.appRoot>
<jib.ecr.root>755619740999.dkr.ecr.us-east-1.amazonaws.com</jib.ecr.root>
<timestamp>${maven.build.timestamp}</timestamp>
<jacoco.version>0.8.5</jacoco.version>
<jooq.version>3.13.4</jooq.version>
<bouncey.version>1.70</bouncey.version>
<pitest.version>1.5.1</pitest.version>
<newrelic.agent.version>7.11.1</newrelic.agent.version>
<newrelic.agent.type>zip</newrelic.agent.type>
<h2.version>2.2.220</h2.version>
</properties>
<developers>
<developer>
<id>nick</id>
<name>Nick Robison</name>
<email>nicholas.a.robison@omb.eop.gov</email>
<organization>United States Digital Service</organization>
</developer>
<developer>
<id>isaac</id>
<name>Isaac Sears</name>
<email>isaac.sears@cms.hhs.gov</email>
<organization>United States Digital Service</organization>
</developer>
<developer>
<id>gina</id>
<name>Gina Maini</name>
<email>gina.m.maini@omb.eop.gov</email>
<organization>United States Digital Service</organization>
</developer>
<developer>
<id>rick</id>
<name>Rick Hawes</name>
<email>richard.m.hawes@omb.eop.gov</email>
<organization>United States Digital Service</organization>
</developer>
<developer>
<id>annie</id>
<name>Annie Sullivan</name>
<email>anne.e.sullivan@omb.eop.gov</email>
<organization>United States Digital Service</organization>
</developer>
<developer>
<id>ronak</id>
<name>Ronak Shah</name>
<email>ronak.shah@hhs.gov</email>
<organization>US Department of Health and Human Services</organization>
</developer>
<developer>
<id>ron</id>
<name>Ron Heft</name>
<email>ronald.k.heft@omb.eop.gov</email>
<organization>United States Digital Service</organization>
</developer>
<developer>
<id>will</id>
<name>Will Huang</name>
<email>will.huang@adhocteam.us</email>
<organization>Ad Hoc LLC</organization>
</developer>
<developer>
<id>silvio</id>
<name>Silvio Luthi</name>
<email>silvio@adhocteam.us</email>
<organization>Ad Hoc LLC</organization>
</developer>
<developer>
<id>john</id>
<name>John Addy</name>
<email>jaddy@fearsol.com</email>
<organization>Fearless</organization>
</developer>
<developer>
<id>rich</id>
<name>Richard Braman</name>
<email>richard.braman@adhocteam.us</email>
<organization>Ad Hoc LLC</organization>
</developer>
<developer>
<id>sal</id>
<name>Salvador Gutierrez</name>
<email>sal.gutierrez@adhocteam.us</email>
<organization>Ad Hoc LLC</organization>
</developer>
<developer>
<id>jon</id>
<name>Jonathan Fulk</name>
<email>jon.fulk@adhocteam.us</email>
<organization>Ad Hoc LLC</organization>
</developer>
</developers>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-bom</artifactId>
<version>${dropwizard.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-dependencies</artifactId>
<version>${dropwizard.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>ru.vyarus.guicey</groupId>
<artifactId>guicey-bom</artifactId>
<version>6.2.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--No longer shipped with Java 11, so we need to include it manually-->
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<!--This is required for Java 11 support. The version shipped with Hibernate is too old-->
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-io</artifactId>
<version>10.0.20</version>
</dependency>
<dependency>
<groupId>ru.vyarus</groupId>
<artifactId>dropwizard-guicey</artifactId>
<version>6.2.1</version>
<exclusions>
<exclusion>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-io</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.typesafe</groupId>
<artifactId>config</artifactId>
<version>1.4.2</version>
</dependency>
<!--Locking this dependency version to the one provided by Dropwizard, we'll need to manually update it as we go along-->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.6.15.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.5.Final</version>
</dependency>
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>javax.persistence-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${pgsql.version}</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>com.google.inject</groupId>
<artifactId>guice</artifactId>
<version>5.1.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard</groupId>
<artifactId>dropwizard-json-logging</artifactId>
<version>${dropwizard.version}</version>
</dependency>
<dependency>
<groupId>${hapi.fhir.groupID}</groupId>
<artifactId>hapi-fhir-base</artifactId>
<version>${hapi.fhir.version}</version>
</dependency>
<dependency>
<groupId>${hapi.fhir.groupID}</groupId>
<artifactId>hapi-fhir-structures-dstu3</artifactId>
<version>${hapi.fhir.version}</version>
</dependency>
<dependency>
<groupId>${hapi.fhir.groupID}</groupId>
<artifactId>hapi-fhir-structures-r4</artifactId>
<version>${hapi.fhir.version}</version>
</dependency>
<dependency>
<groupId>com.smoketurner</groupId>
<artifactId>dropwizard-swagger</artifactId>
<version>3.0.0-1</version>
</dependency>
<dependency>
<groupId>io.github.dropwizard-jobs</groupId>
<artifactId>dropwizard-jobs-core</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>io.github.dropwizard-jobs</groupId>
<artifactId>dropwizard-jobs-guice</artifactId>
<version>5.1.4</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>32.0.0-jre</version>
</dependency>
<dependency>
<groupId>com.newrelic.agent.java</groupId>
<artifactId>newrelic-java</artifactId>
<version>${newrelic.agent.version}</version>
<scope>provided</scope>
<type>${newrelic.agent.type}</type>
</dependency>
<!--Test dependencies-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>${slf4j.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${hapi.fhir.groupID}</groupId>
<artifactId>hapi-fhir-validation-resources-dstu3</artifactId>
<version>${hapi.fhir.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.helger</groupId>
<artifactId>ph-schematron</artifactId>
<version>5.3.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>${hapi.fhir.groupID}</groupId>
<artifactId>hapi-fhir-client</artifactId>
<version>${hapi.fhir.version}</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-junit-jupiter</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.14</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>testcontainers-bom</artifactId>
<version>1.19.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>junit-jupiter</artifactId>
<version>1.19.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testcontainers</groupId>
<artifactId>postgresql</artifactId>
<version>1.19.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>io.hypersistence</groupId>
<artifactId>hypersistence-utils-hibernate-55</artifactId>
<version>3.7.0</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<!--Test resources-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jacoco</groupId>
<artifactId>org.jacoco.agent</artifactId>
<version>${jacoco.version}</version>
<classifier>runtime</classifier>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>${pitest.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
<profiles>
<!-- Profile for running the Integration tests, requires everything except for the dpc-api service to be running-->
<profile>
<id>integration-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration combine.self="override">
<groups>Integration</groups>
<forkedProcessExitTimeoutInSeconds>600</forkedProcessExitTimeoutInSeconds>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>unit-tests</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>Integration</excludedGroups>
<parallel>all</parallel>
<threadCount>10</threadCount>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<!-- CI Profile that adds JaCoCo to the Docker containers and runs the IT report phase correctly-->
<profile>
<id>ci</id>
<build>
<plugins>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-jacoco</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<phase>compile</phase>
<configuration>
<includeArtifactIds>org.jacoco.agent</includeArtifactIds>
<includeClassifiers>runtime</includeClassifiers>
<outputDirectory>${project.build.directory}/jacoco-agent</outputDirectory>
<stripVersion>true</stripVersion>
</configuration>
</execution>
</executions>
</plugin>
<!-- We have to do this because for some reason the Maven plugin isn't letting me set configuration options on a per-execution basis -->
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration combine.self="append">
<dataFile>${project.basedir}/../jacocoReport/${project.artifactId}/jacoco-it.exec</dataFile>
</configuration>
<executions>
<execution>
<id>report-integration</id>
<phase>prepare-package</phase>
<goals>
<goal>report-integration</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<!-- Run the Google Error Prone checker to make sure we didn't make any silly mistakes -->
<profile>
<id>error-prone</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>compile-with-error-prone</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-XDcompilePolicy=simple</arg>
<!--All ErrorProne configuration options need to be included in a single arg line-->
<arg>-Xplugin:ErrorProne -XepExcludedPaths:.*/target/generated-sources/.*
-Xep:RemoveUnusedImports:ERROR
</arg>
<!-- Tell ErrorProne to ignore checking for processed annotations-->
<arg>-Xlint:all,-processing</arg>
<!-- For now, lets just treat errors as errors, and warnings can be ignored -->
<!-- <arg>-Werror</arg> -->
</compilerArgs>
<annotationProcessorPaths>
<path>
<groupId>com.google.errorprone</groupId>
<artifactId>error_prone_core</artifactId>
<version>2.4.0</version>
</path>
</annotationProcessorPaths>
<!-- Erroneously inverted logic... for details, see
https://jira.codehaus.org/browse/MCOMPILER-209 -->
<useIncrementalCompilation>true</useIncrementalCompilation>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>release</id>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<configuration>
<to>
<tags combine.children="override">
<tag>${project.version}</tag>
</tags>
</to>
</configuration>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>debug</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<executions>
<execution>
<id>compile-with-debug-info</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<showWarnings>true</showWarnings>
<compilerArgs>
<arg>-g</arg>
</compilerArgs>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M3</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
<!-- Base configuration for Docker images -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>unpack-newrelic</id>
<phase>prepare-package</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>com.newrelic.agent.java</includeGroupIds>
<includeArtifactIds>newrelic-java</includeArtifactIds>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
<outputDirectory>${project.build.directory}/newrelic-agent</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<to>
<image>${jib.ecr.root}/${project.artifactId}</image>
<tags>
<tag>latest</tag>
</tags>
</to>
<from>
<image>docker://dpc-base:latest</image>
</from>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>dockerBuild</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.5</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.9.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0-M1</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludedGroups>Integration</excludedGroups>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<!--Exclude generated sources, such as Jooq-->
<excludePackageNames>gov.cms.dpc.attribution.dao;gov.cms.dpc.attribution.dao.*;
gov.cms.dpc.consent.dao;gov.cms.dpc.consent.dao.*
</excludePackageNames>
<!--Log only errors during the build-->
<quiet>true</quiet>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId>
<version>3.0.0-M3</version>
<executions>
<execution>
<id>enforce-maven</id>
<goals>
<goal>enforce</goal>
</goals>
<configuration>
<rules>
<requireMavenVersion>
<version>[3.0.0,4.0.0)</version>
</requireMavenVersion>
<requireJavaVersion>
<version>[11,12)</version>
</requireJavaVersion>
</rules>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/*_.class</exclude>
<!--Exclude auto-generated JOOQ classes-->
<exclude>gov/cms/dpc/attribution/dao/**/*</exclude>
<!-- Exclude HL7 parsers, because they're too big-->
<exclude>org/hl7/fhir/r4/formats/*</exclude>
<exclude>org/hl7/fhir/r5/formats/*</exclude>
<!-- We can exclude testing files, because they're for testing-->
<exclude>gov/cms/dpc/testing/**/*</exclude>
<!-- Exclude test utilities for BlueButton-->
<exclude>gov/cms/dpc/bluebutton/**/MockBlueButton*.class</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>run-agent</id>
<goals>
<goal>prepare-agent</goal>
</goals>
</execution>
<execution>
<id>report</id>
<phase>test</phase>
<goals>
<goal>report</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.0</version>
<executions>
<execution>
<id>git-commit</id>
<goals>
<goal>revision</goal>
</goals>
<configuration>
<generateGitPropertiesFile>true</generateGitPropertiesFile>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>${pitest.version}</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>0.12</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<reporting>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId>
<version>3.9.0</version>
</plugin>
<plugin>
<artifactId>maven-project-info-reports-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<dependencyDetailsEnabled>false</dependencyDetailsEnabled>
</configuration>
</plugin>
</plugins>
</reporting>
</project>