<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>


	<properties>
		
		<!-- Default is snapshot -->
		<jopt.version.postfix>-SNAPSHOT</jopt.version.postfix>
		
		<java.version.source>8</java.version.source>
		<java.version.target>8</java.version.target>
		
		<jopt.version.number>7.5.2-j8</jopt.version.number>
		
		
		<maven.compiler.source>${java.version.source}</maven.compiler.source>
		<maven.compiler.target>${java.version.target}</maven.compiler.target>
		
		<project.build.sourceEncoding>cp1252</project.build.sourceEncoding>
		<build.time.utc>${maven.build.timestamp}</build.time.utc>
		
		<!-- ============================= Dependency versions ============================= -->
		
		<guava.version>31.0.1-jre</guava.version> <!-- DLL: For dll usage, we have to use 31.0.1-jre -->
		<maven-compiler-plugin.version>2.0</maven-compiler-plugin.version> <!-- DLL: 2.0 For dll build -->
		<log4j-core.version>2.24.3</log4j-core.version> <!-- DLL: For dll usage, we have to include it! So NO provided scope -->
		
		
		<!--  Version that break in Java 8 when upgraded -->
		<spring-data-mongodb.version>3.4.6</spring-data-mongodb.version> <!-- For 4.0.0 we have to target at least JDK 17 -->
		<testng.version>7.5</testng.version> <!-- For >= 7.7.0 we have to target at least JDK 11 -->
		
		<!--  Version that break in Java 8 when upgraded END-->

		<value.version>2.10.1</value.version>
		<jackson-databind.version>2.18.2</jackson-databind.version>
		<jackson-datatype-guava.version>2.18.2</jackson-datatype-guava.version>
		<jackson-module-parameter-names.version>2.18.2</jackson-module-parameter-names.version>
		<jackson-datatype-jdk8.version>2.18.2</jackson-datatype-jdk8.version>
		<jackson-datatype-jsr310.version>2.18.2</jackson-datatype-jsr310.version>
		
		<rxjava.version>3.1.10</rxjava.version>
		<swagger-annotations.version>2.2.28</swagger-annotations.version>
		
		
		<unit-api.version>2.1</unit-api.version>  <!-- Newer version (> 2.1) leads to missing class during parsing -->
		<unit-ri.version>1.0.3</unit-ri.version>
		
		<commons-math3.version>3.6.1</commons-math3.version>
		<commons-lang3.version>3.17.0</commons-lang3.version>
		<commons-compress.version>1.27.1</commons-compress.version>
		
		<!-- For tests -->
		
		<hamcrest.version>3.0</hamcrest.version> 
		
		<javafaker.version>1.0.2</javafaker.version>
		<datafactory.version>0.8</datafactory.version>
		
		<!-- During build -->
		<maven-javadoc-plugin.version>3.6.3</maven-javadoc-plugin.version>
		<maven-deploy-plugin.version>3.1.1</maven-deploy-plugin.version>
		
		<proguard-maven-plugin.version>2.6.0</proguard-maven-plugin.version>
		
		<!-- Pro guard - By default base version 7.2.2 is used by proguard-maven. We use the up to java21 compatible core version 9.1.0+  -->
		<proguard.base.version>7.6.1</proguard.base.version>
		<proguard.core.version>9.1.7</proguard.core.version>
		
		<wagon-maven-plugin.version>2.0.2</wagon-maven-plugin.version>
		<wagon-ftp.version>3.5.3</wagon-ftp.version>
		<wagon-ssh.version>3.5.3</wagon-ssh.version>
		
		
		<maven-source-plugin.version>3.3.0</maven-source-plugin.version>
		<git-commit-id-plugin.version>4.9.10</git-commit-id-plugin.version>
		
		<properties-maven-plugin.version>1.1.0</properties-maven-plugin.version>
		<jacoco-maven-plugin.version>0.8.8</jacoco-maven-plugin.version>
		
		<license-maven-plugin.version>2.0.0</license-maven-plugin.version> <!--Newer version needs refactoring of third party output -->
		<maven-shade-plugin.version>3.5.1</maven-shade-plugin.version>
		
		<maven-surefire-plugin.version>3.2.2</maven-surefire-plugin.version>
		
		<bson.version>5.2.1</bson.version>  <!--This is mandatorily defined by spring-boot version where the jar will be integrated -->
	
	
		<!--  Temp-->
		
		<poi-ooxml.version>5.4.0</poi-ooxml.version>
		<poi.version>5.4.0</poi.version>
		
		<jts-core.version>1.20.0</jts-core.version>
		
		<!--  Temp END-->
		
		<!-- ===================== Dependency versions End ============================= -->


		<!-- Endpoints -->
		<dna.nexus.maven.endpoint>https://private.repo.dna-evolutions.com</dna.nexus.maven.endpoint>
		<dna.nexus.maven.obfuscated.endpoint>https://public.repo.dna-evolutions.com</dna.nexus.maven.obfuscated.endpoint>

		<!-- Private -->
		<dna.nexus.maven.public>${dna.nexus.maven.endpoint}/repository/maven-public/</dna.nexus.maven.public>
		<dna.nexus.maven.releases>${dna.nexus.maven.endpoint}/repository/maven-releases/</dna.nexus.maven.releases>
		<dna.nexus.maven.snapshots>${dna.nexus.maven.endpoint}/repository/maven-snapshots/</dna.nexus.maven.snapshots>
		<!-- Public -->
		<dna.nexus.maven.obfuscated>${dna.nexus.maven.obfuscated.endpoint}/repository/maven-public/</dna.nexus.maven.obfuscated>
		<dna.nexus.maven.obfuscated.releases>${dna.nexus.maven.obfuscated.endpoint}/repository/maven-releases/</dna.nexus.maven.obfuscated.releases>

		<dna.ftp.javadoc.endpoint>ftp://public.javadoc.dna-evolutions.com</dna.ftp.javadoc.endpoint>
		<dna.ssh.javadoc.endpoint>scp://public.javadoc.dna-evolutions.com</dna.ssh.javadoc.endpoint>


		<!-- We will not use the snapshot folder so far and only provide releases 
			to public -->
		<dna.nexus.maven.obfuscated.snapshots>${dna.nexus.maven.obfuscated.endpoint}/repository/maven-snapshots/</dna.nexus.maven.obfuscated.snapshots>
	</properties>

	<!-- General info -->
	<url>http://www.dna-evolutions.com/</url>
	<groupId>jopt</groupId>
	<version>${jopt.version.number}${jopt.version.postfix}</version>
	<artifactId>jopt.core</artifactId>
	<name>JOpt Java Core</name>
	<inceptionYear>2017</inceptionYear>
	<description>Core lib for JOpt core.</description>
	<packaging>jar</packaging>


	<developers>
		<developer>
			<id>jens@dnaevolutions</id>
			<name>Jens Richter</name>
			<email>jens.richter@dna-evolutions.com</email>
		</developer>
	</developers>


	<organization>
		<name>DNA Evolutions GmbH</name>
		<url>http://www.dna-evolutions.com/</url>
	</organization>


	<licenses>
		<license>
			<name>Custom DNA evolutions license</name>
			<url>https://www.dna-evolutions.com</url>
		</license>
	</licenses>


	<repositories>
		<repository>
			<id>jopt4-maven</id>
			<url>${dna.nexus.maven.public}</url>
			<releases>
				<enabled>true</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>


	<distributionManagement>
		<repository>
			<id>jopt4-maven</id>
			<url>${dna.nexus.maven.releases}</url>
		</repository>

		<snapshotRepository>
			<id>jopt4-maven</id>
			<url>${dna.nexus.maven.snapshots}</url>
		</snapshotRepository>

		<site>
			<id>public-javadoc-ftp-server</id>
			<url>${dna.ftp.javadoc.endpoint}</url>
		</site>
	</distributionManagement>


	<dependencies>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
		</dependency>

		<dependency>
			<groupId>org.immutables</groupId>
			<artifactId>value</artifactId>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-guava</artifactId>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-parameter-names</artifactId>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jdk8</artifactId>
		</dependency>

		<!-- Provides for example Duration DurationDeserializer -->
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jsr310</artifactId>
		</dependency>

		<dependency>
			<groupId>io.reactivex.rxjava3</groupId>
			<artifactId>rxjava</artifactId>
		</dependency>

		<dependency>
			<groupId>javax.measure</groupId>
			<artifactId>unit-api</artifactId>
		</dependency>

		<dependency>
			<groupId>tec.units</groupId>
			<artifactId>unit-ri</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<!--<scope>provided</scope> --> <!-- For dll usage, we have to include it! So NO provided scope -->
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-math3</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-compress</artifactId>
		</dependency>
		
		<dependency>
	    	<groupId>org.mongodb</groupId>
	    	<artifactId>bson</artifactId>
		</dependency>
		
		<!-- PROVIDED -->	
		<dependency>
			<groupId>io.swagger.core.v3</groupId>
			<artifactId>swagger-annotations</artifactId>
			<version>${swagger-annotations.version}</version>
			<scope>provided</scope>
		</dependency>
		
		<dependency>
		    <groupId>org.springframework.data</groupId>
		    <artifactId>spring-data-mongodb</artifactId>
		    <version>${spring-data-mongodb.version}</version>
		    <scope>provided</scope>
		</dependency>
		
		<dependency>
		    <groupId>org.locationtech.jts</groupId>
		    <artifactId>jts-core</artifactId>
		    <version>${jts-core.version}</version>
		</dependency>
		
		<!-- for excel -->
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi</artifactId>
			<version>${poi.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.poi</groupId>
			<artifactId>poi-ooxml</artifactId>
			<version>${poi-ooxml.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>${testng.version}</version>
			<scope>test</scope>
		</dependency>
		
		<dependency>
			<groupId>org.hamcrest</groupId>
			<artifactId>hamcrest</artifactId>
			<version>${hamcrest.version}</version>
			<scope>test</scope>
		</dependency>
		
		<dependency>
			<groupId>com.github.javafaker</groupId>
			<artifactId>javafaker</artifactId>
			<version>${javafaker.version}</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.fluttercode.datafactory</groupId>
			<artifactId>datafactory</artifactId>
			<version>${datafactory.version}</version>
			<scope>test</scope>
		</dependency>
		<dependency>
		    <groupId>com.guardsquare</groupId>
		    <artifactId>proguard-base</artifactId>
		     <version>${proguard.base.version}</version>
		</dependency>
		<dependency>
		    <groupId>com.guardsquare</groupId>
		    <artifactId>proguard-core</artifactId>
		     <version>${proguard.core.version}</version>
		</dependency>
	</dependencies>
	
	
	
	<!-- MANAGMENT -->
	<dependencyManagement>
		<dependencies>
		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>${guava.version}</version>
		</dependency>

		<dependency>
			<groupId>org.immutables</groupId>
			<artifactId>value</artifactId>
			<version>${value.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>${jackson-databind.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-guava</artifactId>
			<version>${jackson-datatype-guava.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.module</groupId>
			<artifactId>jackson-module-parameter-names</artifactId>
			<version>${jackson-module-parameter-names.version}</version>
		</dependency>

		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jdk8</artifactId>
			<version>${jackson-datatype-jdk8.version}</version>
		</dependency>

		<!-- Provides for example Duration DurationDeserializer -->
		<dependency>
			<groupId>com.fasterxml.jackson.datatype</groupId>
			<artifactId>jackson-datatype-jsr310</artifactId>
			<version>${jackson-datatype-jsr310.version}</version>
		</dependency>

		<dependency>
			<groupId>io.reactivex.rxjava3</groupId>
			<artifactId>rxjava</artifactId>
			<version>${rxjava.version}</version>
		</dependency>

		<dependency>
			<groupId>javax.measure</groupId>
			<artifactId>unit-api</artifactId>
			<version>${unit-api.version}</version>
		</dependency>

		<dependency>
			<groupId>tec.units</groupId>
			<artifactId>unit-ri</artifactId>
			<version>${unit-ri.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>${log4j-core.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-math3</artifactId>
			<version>${commons-math3.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>${commons-lang3.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-compress</artifactId>
			<version>${commons-compress.version}</version>
		</dependency>
		
		<dependency>
	    	<groupId>org.mongodb</groupId>
	    	<artifactId>bson</artifactId>
	    	<version>${bson.version}</version>
		</dependency>

		<dependency>
			<groupId>org.testng</groupId>
			<artifactId>testng</artifactId>
			<version>${testng.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	</dependencyManagement>
	
	<!-- MANAGMENT DONE -->


	<profiles>
		<profile>
			<id>snapshot</id>
			<activation>
				<!-- this profile is active by default -->
				<activeByDefault>true</activeByDefault>
			</activation>
			<properties>
				<maven.test.skip>false</maven.test.skip>
				<jopt.version.postfix>-SNAPSHOT</jopt.version.postfix>
			</properties>

			<build>
				<plugins>

					<!-- JavaDoc
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<version>${maven-javadoc-plugin.version}</version>

						<configuration>
							<appendAssemblyId>true</appendAssemblyId>

							<tags>
								<tag>
									<name>category</name>
									<placement>a</placement>
									<head>Category:</head>
								</tag>
							</tags>
						</configuration>

						<executions>
							<execution>
								<id>attach-all-javadocs</id>
								<phase>package</phase>
								<goals>
									<goal>jar</goal>
								</goals>
								<configuration>
									<destDir>target/full-apidocs</destDir>
									<tags>
										<tag>
											<name>category</name>
											<placement>a</placement>
											<head>Category:</head>
										</tag>
									</tags>
								</configuration>
							</execution>
						</executions>
					</plugin> -->
					
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-deploy-plugin</artifactId>
						<version>${maven-deploy-plugin.version}</version>
						<executions>
							<execution>
								<id>deploy-lib</id>
								<phase>deploy</phase>
								<goals>
									<goal>deploy-file</goal>
								</goals>
								<configuration>
									<repositoryId>jopt4-maven</repositoryId>
									<artifactId>jopt.core.pg</artifactId>
									<packaging>jar</packaging>
									<classifier>pg</classifier>

									<version>${project.version}</version>
									<groupId>jopt</groupId>

									<file>target/${project.build.finalName}-with-dep-pg.jar</file>
									<pomFile>pom.xml</pomFile>
									<url>${dna.nexus.maven.snapshots}</url>
								</configuration>
							</execution>
						</executions>
					</plugin>
					
					<!-- Obfuscation on snapshot -->
					<plugin>
						<groupId>com.github.wvengen</groupId>
						<artifactId>proguard-maven-plugin</artifactId>
						<version>${proguard-maven-plugin.version}</version>
						<executions>
							<execution>
								<phase>package</phase>
								<goals>
									<goal>proguard</goal>
								</goals>
							</execution>
						</executions>
						<dependencies>
		                    <dependency>
		                        <groupId>com.guardsquare</groupId>
		                        <artifactId>proguard-core</artifactId>
		                        <version>${proguard.core.version}</version>
		                        <scope>runtime</scope>
		                    </dependency>
		                </dependencies>
						<configuration>
							<obfuscate>true</obfuscate>
							<injar>${project.build.finalName}-with-dep.jar</injar>
							<outjar>${project.build.finalName}-with-dep-pg.jar</outjar>
							<includeDependency>true</includeDependency>
							<exclusions>

								<!-- exclude the artifact -->
								<exclusion>
									<groupId>org.apache.logging.log4j</groupId>
									<artifactId>log4j-core</artifactId>
								</exclusion>
								
								<exclusion>
									<groupId>org.bson</groupId>
									<artifactId>bson</artifactId>
								</exclusion>

							</exclusions>
							<inclusions>

								<inclusion>
									<groupId>com.google.guava</groupId>
									<artifactId>guava</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>org.immutables</groupId>
									<artifactId>value</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.core</groupId>
									<artifactId>jackson-databind</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.datatype</groupId>
									<artifactId>jackson-datatype-guava</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.module</groupId>
									<artifactId>jackson-module-parameter-names</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.datatype</groupId>
									<artifactId>jackson-datatype-jdk8</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.datatype</groupId>
									<artifactId>jackson-datatype-jsr310</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>io.reactivex.rxjava2</groupId>
									<artifactId>rxjava</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>javax.measure</groupId>
									<artifactId>unit-api</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>tec.units</groupId>
									<artifactId>unit-ri</artifactId>
									<library>true</library>
								</inclusion>

								<!-- <inclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> 
									<library>true</library> </inclusion> -->

								<inclusion>
									<groupId>org.apache.commons</groupId>
									<artifactId>commons-math3</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>org.apache.commons</groupId>
									<artifactId>commons-lang3</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>org.apache.commons</groupId>
									<artifactId>commons-compress</artifactId>
									<library>true</library>
								</inclusion>

							</inclusions>
							<options>
								<option>-keep class !com.dna.** { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.body.Optimization { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.body.event.IOptimizationEventListener {
									*;
									}</option>

								<option>-keep public class
									com.dna.jopt.framework.body.IOptimization { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.inputplausibility.properties.IPropertyProvider
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.operator.IOperator { *; }</option>
								<option>-keepclassmembers class * implements
									java.io.Serializable
									{
									*; }</option>

								<option>-keep class com.dna.jopt.framework.codedefinition.** {
									*;
									}</option>
								<option>-keep interface com.dna.jopt.framework.codedefinition.**
									{
									*; }</option>

								<option>-keep class com.dna.jopt.framework.stream.** { *; }</option>

								<option>-keep interface com.dna.jopt.framework.stream.** { *; }</option>

								<option>-keep public class
									com.dna.jopt.framework.body.event.OptimizationEvents { *; }</option>

								<option>-keepnames class * implements java.io.Serializable { *;
									}</option>
								<!-- Names that we need -->
								<option>-keepclasseswithmembernames class
									com.dna.jopt.framework.body.scheme.DefaultOptimizationScheme {
									*;
									}</option>
								<option>-keep public class
									com.dna.jopt.framework.body.scheme.DefaultOptimizationScheme {
									*;
									}</option>
								<option>-keep public class
									com.dna.jopt.framework.body.scheme.IOptimizationScheme { *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.nodelevel.custom.ICustomNodeLevelRestriction
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.assessment.costassessorrestriction.nodelevel.custom.AbstractCustomNodeLevelRestriction
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.nodelevel.IEntityCostAssesorNodeRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.routelevel.custom.ICustomRouteLevelRestriction
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.assessment.costassessorrestriction.routelevel.custom.AbstractCustomRouteLevelRestriction
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.routelevel.IEntityCostAssessorRouteRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.IEntityCostAssessorRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.joblevel.IEntityCostAssessorJobRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessor.EvaluatedNodeDataHolder {
									*;
									}</option>
								<option>-keep public class
									com.dna.jopt.assessment.costadjustment.EntityCostAdjuster { *;
									}</option>
								<option>-keep public class
									com.dna.jopt.member.unit.violation.ViolationFactory { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.inputplausibility.properties.PropertyProviderHelper
									{ *; }</option>

								<option>-keep public class com.dna.jopt.io.IOptimizationIO { *;
									}</option>
								<option>-keep public class
									com.dna.jopt.io.BZip2JsonOptimizationIO
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.config.convert.ExportTarget { *; }</option>
								<option>-keep public class com.dna.jopt.config.convert.Result {
									*;
									}</option>
								<option>-keep public class com.dna.jopt.config.types.** { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.inputplausibility.properties.validation.PropertyItem
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessor.IEntityCostAssessor { *; }</option>

								<!-- AutoFilter -->
								<option>-keep public class
									com.dna.jopt.member.unit.filter.auto.reason.INodeFilterReason {
									*; }</option>

								<!-- Cost Converger -->
								<option>-keep public class
									com.dna.jopt.util.costconverger.ICostConverger { *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.util.costconverger.AbstractCostConverger { *; }</option>

								<!-- BackupConnector -->
								<option>-keep public class
									com.dna.jopt.member.unit.nodeedge.backupconnector.DefaultFlatEarthAverageSpeedBackupElementConnector
									{ *; }</option>


								<!-- Setup -->
								<option>-keep public class
									com.dna.jopt.framework.body.setup.IOptimizationSetup { *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.framework.body.setup.DefaultOptimizationSetup { *;
									}</option>
								<option>-keep public class
									com.dna.jopt.framework.body.setup.DefaultOptimizationSetup { *;
									}</option>

								<option>-keep public class
									com.dna.jopt.framework.exception.uncaught.JOptUncaughtExceptionHandler
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.exception.uncaught.IJOptUncaughtExceptionHandler
									{ *; }</option>

								<!-- ZoneCode -->
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.zone.IZoneCode {
									*; }</option>
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.zone.IZoneCodeConstraint
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.zone.IZoneCodeQualification
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.IWorkingHoursLevelConstraint
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.ukpostcode.UKPostCode
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.ukpostcode.UKPostCodeConstraint
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.ukpostcode.UKPostCodeQualification
									{ *; }</option>


								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.zonenumber.ZoneNumber
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.zonenumber.ZoneNumberConstraint
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.zonenumber.ZoneNumberQualification
									{ *; }</option>

								<!-- PND -->
								<option>-keep public class
									com.dna.jopt.member.unit.pnd.IPNDItem
									{
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.capacity.ILoadCapacity {
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.load.timed.ITimedLoad {
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.load.ILoad {
									*; }</option>


								<option>-keep public class
									com.dna.jopt.member.unit.pnd.depot.resource.IResourceDepot {
									*;
									}</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.depot.node.INodeDepot {
									*; }</option>



								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.capacity.simple.SimpleLoadCapacity
									{ *; }</option>
									
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.capacity.degrading.DegradingLoadCapacity
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.capacity.AbstractLoadCapacity
									{ *;
									}</option>


								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.depot.resource.simple.SimpleResourceDepot
									{ *; }</option>



								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.depot.node.simple.SimpleNodeDepot
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.simple.SimpleLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.SupplyFlexLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.MixedFlexLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.RequestFlexLoad
									{ *;
									}</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.TimedSupplyFlexLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.timed.TimedLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.unload.UnloadAllLoad
									{ *; }</option>


								<!-- PND Cargo -->

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.util.CargoSpace
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.util.ICargoSpace {
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.util.ICargoSpaceGood {
									*; }</option>



								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.util.CargoSpaceGood
									{ *; }</option>


								<!-- Custom Scheme -->
								<option>-keep class com.dna.jopt.framework.body.scheme.helper.**
									{
									*;
									}</option>


								<!-- OptimizationJSONImporter -->
								<option>-keep public class
									com.dna.jopt.io.importing.IOptimizationImporter
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.io.importing.json.OptimizationJSONImporter
									{ *; }</option>
									
								<!-- OptimizationJSONExporter -->
								<option>-keep public class
									com.dna.jopt.io.exporting.IOptimizationExporter
									{ *; }</option>
		
								<option>-keepclasseswithmembernames class
									com.dna.jopt.io.exporting.json.OptimizationJSONExporter
									{ *; }</option>
									
								<option>-keepclasseswithmembernames class
									com.dna.jopt.io.exporting.kml.SolutionKMLExporter
									{ *; }</option>

								<!-- OpenLocation -->
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation
									{
									*; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation$Builder
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation$BuildFinal
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation$CodeBuildStage
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.AbstractOpenLocation
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocationCode
									{ *; }</option>
									
									
								<option>-keep class com.dna.jopt.member.unit.nodeedge.reduced.** {
									*;
									}</option>
									
									
								<!-- Move later on to core, eventually -->
								<option>-keep class com.dna.jopt.config.types.** {
									*;
									}</option>
		
								<option>-keep class com.dna.jopt.config.serialize.** {
									*;
									}</option>
		
								<option>-keep class com.dna.jopt.config.convert.** {
									*;
									}</option>
									
								<option>-keep class com.dna.jopt.member.unit.nodeedge.time.** {
									*;
									}</option>


								<!-- Config JSON -->
								<option>-keep class com.dna.jopt.config.json.** {
									*;
									}</option>
									
								<!-- External connection provider-->
								<option>-keep public class
									com.dna.jopt.member.unit.nodeedge.externalprovider.IConnectionProviderCaller
									{ *; }</option>
									
								<!-- utils -->
								<option>-keep public class
									com.dna.jopt.util.likelyconnection.LikelyConnectionManager
									{ *; }</option>
									
								<!-- Clustering -->	
								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterUtil
									{ *; }</option>
								
								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterResult$Builder
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterResult$BuildFinal
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterResult$CodeBuildStage
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.AbstractClusterResult
									{ *; }</option>	
									
								<option>-keep public class
									com.dna.jopt.framework.analyze.clustering.cluster.IElementsCluster {
									*; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.AbstractOptimizationAlgorithm
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.heuristic.helper.operatorselection.IOperatorSelector
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.heuristic.helper.operatorselection.OperatorScoreSelector
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.member.bucket.entity.EntityComparators
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.IOptimizationAlgorithm
									{ *; }</option>	
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.poststepmanagment.IPostStepManager
									{ *; }</option>	
									
								<option>-keep public class
									com.dna.jopt.util.cutter.OptimizationCutter
									{ *; }</option>	
									
								<option>-keep public class com.dna.jopt.cloud.touroptimizer.pluginservice.** { *; }</option>
								
								<!-- Comparison -->	
								<option>-keep public class com.dna.jopt.util.optimizationresultanalyzer.** { *; }</option>
								<option>-keep public class com.dna.jopt.util.optimizationresultmodifier.** { *; }</option>
								
								<option>-keepattributes *Annotation*</option>
								<option>-dontwarn</option>
								<option>-keepattributes Signature</option>
								<option>-keepattributes Exceptions</option>
								<option>-keepattributes Deprecated</option>
								<option>-keepattributes MethodParameters</option>
								<option>-keepattributes InnerClasses</option>
								<option>-keepattributes InnerClasses,EnclosingMethod</option>
								<option>-dontshrink</option>
								<option>-dontoptimize</option>
								<!-- <option>-dontpreverify</option>-->
								<option>-dontskipnonpubliclibraryclasses</option>
								<option>-dontskipnonpubliclibraryclassmembers</option>
							</options>
							<libs>
							    <lib>${java.home}/lib/rt.jar</lib>
								<lib>${java.home}/lib/jce.jar</lib>
							</libs>
							<archive>
								<manifest>
									<mainClass>Main</mainClass>
									<packageName>jopt.rapot.core</packageName>
								</manifest>
							</archive>

						</configuration>
					</plugin>
					
					<!-- Done -->
					
				</plugins>
			</build>
		</profile>

		<profile>
			<id>release</id>

			<properties>
				<!-- We create releases based on snapshot, so additional testing is not 
					required -->
				<maven.test.skip>true</maven.test.skip>
				<!-- No postfix -->
				<jopt.version.postfix></jopt.version.postfix>
			</properties>

			<build>
				<plugins>
					<!-- Deploy public lib -->
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-deploy-plugin</artifactId>
						<version>${maven-deploy-plugin.version}</version>
						<executions>
							<execution>
								<id>deploy-lib</id>
								<phase>deploy</phase>
								<goals>
									<goal>deploy-file</goal>
								</goals>
								<configuration>
									<repositoryId>jopt4-maven-ob</repositoryId>
									<artifactId>jopt.core.pg</artifactId>
									<packaging>jar</packaging>
									<classifier>shaded</classifier>

									<version>${project.version}</version>
									<groupId>jopt</groupId>

									<file>target/${project.build.finalName}-with-dep-pg.jar</file>
									<pomFile>pom.xml</pomFile>
									
									<!-- <javadoc>target/${project.build.finalName}-public-javadocs.jar</javadoc> -->
									
									<url>${dna.nexus.maven.obfuscated.releases}</url>
								</configuration>
							</execution>
						</executions>
					</plugin>

					<!-- JavaDoc
					<plugin>
						<groupId>org.apache.maven.plugins</groupId>
						<artifactId>maven-javadoc-plugin</artifactId>
						<version>${maven-javadoc-plugin.version}</version>

						<configuration>
							<appendAssemblyId>true</appendAssemblyId>

							<tags>
								<tag>
									<name>category</name>
									<placement>a</placement>
									<head>Category:</head>
								</tag>
							</tags>
						</configuration>

						<executions>
							<execution>
								<id>attach-all-javadocs</id>
								<phase>package</phase>
								<goals>
									<goal>jar</goal>
								</goals>
								<configuration>
									<destDir>target/full-apidocs</destDir>
									<tags>
										<tag>
											<name>category</name>
											<placement>a</placement>
											<head>Category:</head>
										</tag>
									</tags>
								</configuration>
							</execution>

							<execution>
								<id>attach-public-javadocs</id>
								<phase>package</phase>
								<goals>
									<goal>jar</goal>
								</goals>
								<configuration>
									<destDir>target/public-apidocs</destDir>
									<classifier>public-javadocs</classifier>
									<excludePackageNames>
										com.dna.jopt.assessment.costadjustment:
										com.dna.jopt.assessment.costadjustment.*:

										com.dna.jopt.assessment.costassessor:
										com.dna.jopt.assessment.costassessor.*:

										com.dna.jopt.assessment.costassessorrestriction:
										com.dna.jopt.assessment.costassessorrestriction.*:

										com.dna.jopt.config:
										com.dna.jopt.config.*:

										com.dna.jopt.framework.analyze:
										com.dna.jopt.framework.analyze.*:

										com.dna.jopt.framework.body.setup:
										com.dna.jopt.framework.body.setup.*:

										com.dna.jopt.framework.firstentitycreation:
										com.dna.jopt.framework.firstentitycreation.*:

										com.dna.jopt.framework.inputplausibility:
										com.dna.jopt.framework.inputplausibility.*:

										com.dna.jopt.framework.lic:
										com.dna.jopt.framework.lic.*:

										com.dna.jopt.framework.licensing:
										com.dna.jopt.framework.licensing.*:

										com.dna.jopt.framework.picker:
										com.dna.jopt.framework.picker.*:

										com.dna.jopt.revision:
										com.dna.jopt.revision.*:

										com.dna.jopt.util.cluster:
										com.dna.jopt.util.cluster.*:

										com.dna.jopt.util.entityhealth:
										com.dna.jopt.util.entityhealth.*:

										com.dna.jopt.util.hotspot:
										com.dna.jopt.util.hotspot.*:

										com.dna.jopt.util.optimizationresultanalyzer:
										com.dna.jopt.util.optimizationresultanalyzer.*:

										com.dna.jopt.util.optimizationresultmodifier:
										com.dna.jopt.util.optimizationresultmodifier.*:

										com.dna.jopt.util.route:
										com.dna.jopt.util.route.*:

										com.dna.jopt.util.spawn:
										com.dna.jopt.util.spawn.*

									</excludePackageNames>
									<tags>
										<tag>
											<name>category</name>
											<placement>a</placement>
											<head>Category:</head>
										</tag>
									</tags>
								</configuration>
							</execution>
						</executions>
					</plugin> -->

					<!-- Send data to
					<plugin>
						<groupId>org.codehaus.mojo</groupId>
						<artifactId>wagon-maven-plugin</artifactId>
						<version>${wagon-maven-plugin.version}</version>
						<executions>
							<execution>
								<id>upload-javadoc</id>
								<phase>deploy</phase>
								<goals>
									<goal>upload</goal>
								</goals>
								<configuration>
									<serverId>public-javadoc-ftp-server</serverId>
									<fromDir>target/</fromDir>
									<includes>${project.build.finalName}-public-javadocs.jar</includes>
									<excludes>pom.xml</excludes>
									<url>${dna.ftp.javadoc.endpoint}</url>
									<toDir>/httpdocs</toDir>
								</configuration>
							</execution>

							<execution>
								<id>execute-unpack-commands</id>
								<phase>deploy</phase>
								<goals>
									<goal>sshexec</goal>
								</goals>
								<configuration>
									<serverId>public-javadoc-ssh-server</serverId>
									<url>${dna.ssh.javadoc.endpoint}</url>
									<commands>

										<command>rm -rf ./httpdocs/latest_javadoc/</command>
										
										<command>chmod 777 ./httpdocs/${project.build.finalName}-public-javadocs.jar</command>

	
										<command>cp ./httpdocs/${project.build.finalName}-public-javadocs.jar ./httpdocs/${project.build.finalName}-public-javadocs.zip</command>

		
										<command>unzip -o ./httpdocs/${project.build.finalName}-public-javadocs.zip -d ./httpdocs/latest_javadoc/ > latest_unzip_log.txt</command>

										<command>rm -rf ./httpdocs/${project.build.finalName}-public-javadocs.jar</command>

										<command>rm -rf ./httpdocs/${project.build.finalName}-public-javadocs.zip</command>

									</commands>
								</configuration>
							</execution>

						</executions>
					</plugin> -->


					<!-- Obfuscation on release -->
					<plugin>
						<groupId>com.github.wvengen</groupId>
						<artifactId>proguard-maven-plugin</artifactId>
						<version>${proguard-maven-plugin.version}</version>
						<executions>
							<execution>
								<phase>package</phase>
								<goals>
									<goal>proguard</goal>
								</goals>
							</execution>
						</executions>
						<dependencies>
		                    <dependency>
		                        <groupId>com.guardsquare</groupId>
		                        <artifactId>proguard-core</artifactId>
		                        <version>${proguard.core.version}</version>
		                        <scope>runtime</scope>
		                    </dependency>
		                </dependencies>
						<configuration>
							<obfuscate>true</obfuscate>
							<injar>${project.build.finalName}-with-dep.jar</injar>
							<outjar>${project.build.finalName}-with-dep-pg.jar</outjar>
							<includeDependency>true</includeDependency>
							<exclusions>

								<!-- exclude the artifact -->
								<exclusion>
									<groupId>org.apache.logging.log4j</groupId>
									<artifactId>log4j-core</artifactId>
								</exclusion>
								
								<exclusion>
									<groupId>org.bson</groupId>
									<artifactId>bson</artifactId>
								</exclusion>

							</exclusions>
							<inclusions>

								<inclusion>
									<groupId>com.google.guava</groupId>
									<artifactId>guava</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>org.immutables</groupId>
									<artifactId>value</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.core</groupId>
									<artifactId>jackson-databind</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.datatype</groupId>
									<artifactId>jackson-datatype-guava</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.module</groupId>
									<artifactId>jackson-module-parameter-names</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.datatype</groupId>
									<artifactId>jackson-datatype-jdk8</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>com.fasterxml.jackson.datatype</groupId>
									<artifactId>jackson-datatype-jsr310</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>io.reactivex.rxjava2</groupId>
									<artifactId>rxjava</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>javax.measure</groupId>
									<artifactId>unit-api</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>tec.units</groupId>
									<artifactId>unit-ri</artifactId>
									<library>true</library>
								</inclusion>

								<!-- <inclusion> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> 
									<library>true</library> </inclusion> -->

								<inclusion>
									<groupId>org.apache.commons</groupId>
									<artifactId>commons-math3</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>org.apache.commons</groupId>
									<artifactId>commons-lang3</artifactId>
									<library>true</library>
								</inclusion>

								<inclusion>
									<groupId>org.apache.commons</groupId>
									<artifactId>commons-compress</artifactId>
									<library>true</library>
								</inclusion>

							</inclusions>
							<options>
								<option>-keep class !com.dna.** { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.body.Optimization { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.body.event.IOptimizationEventListener {
									*;
									}</option>

								<option>-keep public class
									com.dna.jopt.framework.body.IOptimization { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.inputplausibility.properties.IPropertyProvider
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.operator.IOperator { *; }</option>
								<option>-keepclassmembers class * implements
									java.io.Serializable
									{
									*; }</option>

								<option>-keep class com.dna.jopt.framework.codedefinition.** {
									*;
									}</option>
								<option>-keep interface com.dna.jopt.framework.codedefinition.**
									{
									*; }</option>

								<option>-keep class com.dna.jopt.framework.stream.** { *; }</option>

								<option>-keep interface com.dna.jopt.framework.stream.** { *; }</option>

								<option>-keep public class
									com.dna.jopt.framework.body.event.OptimizationEvents { *; }</option>

								<option>-keepnames class * implements java.io.Serializable { *;
									}</option>
								<!-- Names that we need -->
								<option>-keepclasseswithmembernames class
									com.dna.jopt.framework.body.scheme.DefaultOptimizationScheme {
									*;
									}</option>
								<option>-keep public class
									com.dna.jopt.framework.body.scheme.DefaultOptimizationScheme {
									*;
									}</option>
								<option>-keep public class
									com.dna.jopt.framework.body.scheme.IOptimizationScheme { *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.nodelevel.custom.ICustomNodeLevelRestriction
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.assessment.costassessorrestriction.nodelevel.custom.AbstractCustomNodeLevelRestriction
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.nodelevel.IEntityCostAssesorNodeRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.routelevel.custom.ICustomRouteLevelRestriction
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.assessment.costassessorrestriction.routelevel.custom.AbstractCustomRouteLevelRestriction
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.routelevel.IEntityCostAssessorRouteRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.IEntityCostAssessorRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessorrestriction.joblevel.IEntityCostAssessorJobRestriction
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessor.EvaluatedNodeDataHolder {
									*;
									}</option>
								<option>-keep public class
									com.dna.jopt.assessment.costadjustment.EntityCostAdjuster { *;
									}</option>
								<option>-keep public class
									com.dna.jopt.member.unit.violation.ViolationFactory { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.inputplausibility.properties.PropertyProviderHelper
									{ *; }</option>

								<option>-keep public class com.dna.jopt.io.IOptimizationIO { *;
									}</option>
								<option>-keep public class
									com.dna.jopt.io.BZip2JsonOptimizationIO
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.config.convert.ExportTarget { *; }</option>
								<option>-keep public class com.dna.jopt.config.convert.Result {
									*;
									}</option>
								<option>-keep public class com.dna.jopt.config.types.** { *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.inputplausibility.properties.validation.PropertyItem
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.assessment.costassessor.IEntityCostAssessor { *; }</option>

								<!-- AutoFilter -->
								<option>-keep public class
									com.dna.jopt.member.unit.filter.auto.reason.INodeFilterReason {
									*; }</option>

								<!-- Cost Converger -->
								<option>-keep public class
									com.dna.jopt.util.costconverger.ICostConverger { *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.util.costconverger.AbstractCostConverger { *; }</option>

								<!-- BackupConnector -->
								<option>-keep public class
									com.dna.jopt.member.unit.nodeedge.backupconnector.DefaultFlatEarthAverageSpeedBackupElementConnector
									{ *; }</option>


								<!-- Setup -->
								<option>-keep public class
									com.dna.jopt.framework.body.setup.IOptimizationSetup { *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.framework.body.setup.DefaultOptimizationSetup { *;
									}</option>
								<option>-keep public class
									com.dna.jopt.framework.body.setup.DefaultOptimizationSetup { *;
									}</option>

								<option>-keep public class
									com.dna.jopt.framework.exception.uncaught.JOptUncaughtExceptionHandler
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.framework.exception.uncaught.IJOptUncaughtExceptionHandler
									{ *; }</option>

								<!-- ZoneCode -->
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.zone.IZoneCode {
									*; }</option>
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.zone.IZoneCodeConstraint
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.zone.IZoneCodeQualification
									{ *; }</option>
								<option>-keep public class
									com.dna.jopt.member.unit.condition.workinghour.IWorkingHoursLevelConstraint
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.ukpostcode.UKPostCode
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.ukpostcode.UKPostCodeConstraint
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.ukpostcode.UKPostCodeQualification
									{ *; }</option>


								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.zonenumber.ZoneNumber
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.zonenumber.ZoneNumberConstraint
									{ *; }</option>
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.condition.workinghour.zone.zonenumber.ZoneNumberQualification
									{ *; }</option>

								<!-- PND -->
								<option>-keep public class
									com.dna.jopt.member.unit.pnd.IPNDItem
									{
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.capacity.ILoadCapacity {
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.load.timed.ITimedLoad {
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.load.ILoad {
									*; }</option>


								<option>-keep public class
									com.dna.jopt.member.unit.pnd.depot.resource.IResourceDepot {
									*;
									}</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.depot.node.INodeDepot {
									*; }</option>



								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.capacity.simple.SimpleLoadCapacity
									{ *; }</option>
									
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.capacity.degrading.DegradingLoadCapacity
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.capacity.AbstractLoadCapacity
									{ *;
									}</option>


								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.depot.resource.simple.SimpleResourceDepot
									{ *; }</option>



								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.depot.node.simple.SimpleNodeDepot
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.simple.SimpleLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.SupplyFlexLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.MixedFlexLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.RequestFlexLoad
									{ *;
									}</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.flexload.TimedSupplyFlexLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.timed.TimedLoad
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.load.unload.UnloadAllLoad
									{ *; }</option>


								<!-- PND Cargo -->

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.util.CargoSpace
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.util.ICargoSpace {
									*; }</option>

								<option>-keep public class
									com.dna.jopt.member.unit.pnd.util.ICargoSpaceGood {
									*; }</option>



								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.pnd.util.CargoSpaceGood
									{ *; }</option>


								<!-- Custom Scheme -->
								<option>-keep class com.dna.jopt.framework.body.scheme.helper.**
									{
									*;
									}</option>


								<!-- OptimizationJSONImporter -->
								<option>-keep public class
									com.dna.jopt.io.importing.IOptimizationImporter
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.io.importing.json.OptimizationJSONImporter
									{ *; }</option>
									
									
								<!-- OptimizationJSONExporter -->
								<option>-keep public class
									com.dna.jopt.io.exporting.IOptimizationExporter
									{ *; }</option>
		
								<option>-keepclasseswithmembernames class
									com.dna.jopt.io.exporting.json.OptimizationJSONExporter
									{ *; }</option>
									
								<option>-keepclasseswithmembernames class
									com.dna.jopt.io.exporting.kml.SolutionKMLExporter
									{ *; }</option>

								<!-- OpenLocation -->
								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation
									{
									*; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation$Builder
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation$BuildFinal
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocation$CodeBuildStage
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.AbstractOpenLocation
									{ *; }</option>

								<option>-keepclasseswithmembernames class
									com.dna.jopt.member.unit.converter.openlocation.OpenLocationCode
									{ *; }</option>
									
								<option>-keep class com.dna.jopt.member.unit.nodeedge.reduced.** {
									*;
									}</option>
									
								<!-- Move later on to core, eventually -->
								<option>-keep class com.dna.jopt.config.types.** {
									*;
									}</option>
		
								<option>-keep class com.dna.jopt.config.serialize.** {
									*;
									}</option>
		
								<option>-keep class com.dna.jopt.config.convert.** {
									*;
									}</option>
									
								<option>-keep class com.dna.jopt.member.unit.nodeedge.time.** {
									*;
									}</option>


								<!-- Config JSON -->
								<option>-keep class com.dna.jopt.config.json.** {
									*;
									}</option>
									
								<!-- External connection provider-->
								<option>-keep public class
									com.dna.jopt.member.unit.nodeedge.externalprovider.IConnectionProviderCaller
									{ *; }</option>
									
									
								<!-- utils -->
								<option>-keep public class
									com.dna.jopt.util.likelyconnection.LikelyConnectionManager
									{ *; }</option>
								
								<!-- Clustering -->	
								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterUtil
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterResult$Builder
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterResult$BuildFinal
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.ClusterResult$CodeBuildStage
									{ *; }</option>

								<option>-keep public class
									com.dna.jopt.revision.algorithm.greedy.util.AbstractClusterResult
									{ *; }</option>	
									
									
								<option>-keep public class
									com.dna.jopt.framework.analyze.clustering.cluster.IElementsCluster {
									*; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.AbstractOptimizationAlgorithm
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.heuristic.helper.operatorselection.IOperatorSelector
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.heuristic.helper.operatorselection.OperatorScoreSelector
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.member.bucket.entity.EntityComparators
									{ *; }</option>
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.IOptimizationAlgorithm
									{ *; }</option>	
									
								<option>-keep public class
									com.dna.jopt.revision.algorithm.poststepmanagment.IPostStepManager
									{ *; }</option>	
									
								<option>-keep public class
									com.dna.jopt.util.cutter.OptimizationCutter
									{ *; }</option>	
									
								<option>-keep public class com.dna.jopt.cloud.touroptimizer.pluginservice.** { *; }</option>
								
								<!-- Comparison -->	
								<option>-keep public class com.dna.jopt.util.optimizationresultanalyzer.** { *; }</option>
								<option>-keep public class com.dna.jopt.util.optimizationresultmodifier.** { *; }</option>

								<option>-keepattributes *Annotation*</option>
								<option>-dontwarn</option>
								<option>-keepattributes Signature</option>
								<option>-keepattributes Exceptions</option>
								<option>-keepattributes Deprecated</option>
								<option>-keepattributes MethodParameters</option>
								<option>-keepattributes InnerClasses</option>
								<option>-keepattributes InnerClasses,EnclosingMethod</option>
								<option>-dontshrink</option>
								<option>-dontoptimize</option>
								<!--  <option>-dontpreverify</option>-->
								<option>-dontskipnonpubliclibraryclasses</option>
								<option>-dontskipnonpubliclibraryclassmembers</option>
							</options>
							<libs>
							    <lib>${java.home}/lib/rt.jar</lib>
								<lib>${java.home}/lib/jce.jar</lib>
							</libs>
							<archive>
								<manifest>
									<mainClass>Main</mainClass>
									<packageName>jopt.rapot.core</packageName>
								</manifest>
							</archive>

						</configuration>
					</plugin>

				</plugins>
			</build>
		</profile>
	</profiles>

	<build>

		<extensions>
			<extension>
				<groupId>org.apache.maven.wagon</groupId>
				<artifactId>wagon-ftp</artifactId>
				<version>${wagon-ftp.version}</version>
			</extension>
			<extension>
				<groupId>org.apache.maven.wagon</groupId>
				<artifactId>wagon-ssh</artifactId>
				<version>${wagon-ssh.version}</version>
			</extension>
		</extensions>

		<plugins>
		
		<!--  <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>license-maven-plugin</artifactId>
                <version>2.0.0</version>
                <executions>
               		 <execution>
			            <id>aggregate-download-licenses</id>
			            <goals>
			              <goal>aggregate-download-licenses</goal>
			            </goals>
			          </execution>
                    <execution>
                        <id>add-third-party</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>add-third-party</goal>
                        </goals>
                        
                        <configuration>

							<excludeTransitiveDependencies>true</excludeTransitiveDependencies>
							<excludedScopes>test,provided</excludedScopes>
                            <failOnBlacklist>true</failOnBlacklist>
                            <licenseMerges>

                                <licenseMerge>The Apache Software License, Version 2.0|Apache2|
                                    Apache-2.0|Apache 2|APL2|Apache 2.0|Apache License, Version 2.0|
                                    The Apache License, Version 2.0|Apache Software License - Version 2.0|
                                    the Apache License, ASL Version 2.0|ASL 2.0|Apache License 2.0|ASL, version 2
                                </licenseMerge>

                                <licenseMerge>The MIT License|
                                    MIT license|The MIT License (MIT)|MIT License|MIT|MIT-style
                                </licenseMerge>
                            </licenseMerges>
                        </configuration>
                    </execution>
                </executions>
            </plugin>-->
		
		
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>${maven-compiler-plugin.version}</version> 
				<!-- <version>2.0</version>--> <!-- For dll build -->
				<configuration>
					<source>${maven.compiler.source}</source>
					<target>${maven.compiler.target}</target>
					<compilerArgs>
		          		<arg>-parameters</arg>
		        	</compilerArgs>
				</configuration>
			</plugin>

			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>${maven-shade-plugin.version}</version>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>

							<finalName>${project.build.finalName}-with-dep</finalName>
							<shadedArtifactAttached>true</shadedArtifactAttached>
							<transformers>
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.PluginXmlResourceTransformer" />
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
								<transformer
									implementation="org.apache.maven.plugins.shade.resource.IncludeResourceTransformer">
									<resource>LICENSE.txt</resource>
									<file>src/license/dna_license/license.txt</file>
								</transformer>
							</transformers>
							<minimizeJar>true</minimizeJar>
							<createDependencyReducedPom>false</createDependencyReducedPom>
							<filters>
								<filter>
									<artifact>com.google.guava:guava</artifact>
									<includes>
										<include>com/google/common/**</include>
									</includes>
									<!-- <includes>
										<include>com/google/common/reflect/**</include>
										<include>com/google/common/collect/**</include>
										<include>com/google/common/base/**</include>
										<include>com/google/common/net/**</include>
										<include>com/google/common/hash/**</include>
										<include>com/google/common/cache/**</include>
										<include>com/google/common/primitives/**</include>
									</includes>-->
								</filter>
								<filter>
									<artifact>*:*</artifact>
									<excludes>
										<exclude>META-INF/*.SF</exclude>
										<exclude>META-INF/*.DSA</exclude>
										<exclude>META-INF/*.RSA</exclude>
										<exclude>META-INF/maven/**</exclude>
										<exclude>META-INF/gradle/**</exclude>
										<exclude>META-INF/proguard/**</exclude>
										<exclude>META-INF/services/**</exclude>
										<exclude>META-INF/NOTICE</exclude>
										<exclude>META-INF/LICENSE</exclude>
										<exclude>META-INF/LICENSE.txt</exclude>
										<exclude>META-INF/NOTICE.txt</exclude>
									</excludes>
								</filter>
								<filter>
	                                <!-- Exclude log4j2.xml from the shaded jar. -->
	                                <artifact>*:*</artifact>
	                                <excludes>
	                                    <exclude>log4j2.xml</exclude>
	                                </excludes>
	                            </filter>
							</filters>
						</configuration>
					</execution>
				</executions>
			</plugin>

			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>license-maven-plugin</artifactId>
				<version>${license-maven-plugin.version}</version>

				<configuration>
					<licenseName>dna_license</licenseName>
					<licenseResolver>${project.baseUri}/src/license</licenseResolver>
				</configuration>

				<executions>
					<execution>
						<id>with-single-string-included-licenses</id>
						<phase>generate-resources</phase>
						<goals>
							<goal>add-third-party</goal>
						</goals>
						<configuration>
							<excludedScopes>test</excludedScopes>
							<thirdPartyFilename>THIRD-PARTY-LICENSE.txt</thirdPartyFilename>
						</configuration>
					</execution>
					<execution>
						<id>first</id>
						<goals>
							<goal>update-file-header</goal>
						</goals>
						<phase>process-sources</phase>
						<configuration>
			                <excludes>
			                    <exclude>**/*.json</exclude>
			                    <exclude>**/*.jli</exclude>
			                </excludes>
			            </configuration>
					</execution>
				</executions>
			</plugin>


			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-source-plugin</artifactId>
				<version>${maven-source-plugin.version}</version>
				<configuration>
				</configuration>
				<executions>
					<execution>
						<id>attach-sources</id>
						<goals>
							<goal>jar</goal>
						</goals>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<version>${maven-surefire-plugin.version}</version>
				<configuration>
					<suiteXmlFiles>
						<suiteXmlFile>testng.xml</suiteXmlFile>
					</suiteXmlFiles>
				</configuration>
			</plugin>
			<plugin>
				<groupId>pl.project13.maven</groupId>
				<artifactId>git-commit-id-plugin</artifactId>
				<version>${git-commit-id-plugin.version}</version>
				<executions>
					<execution>
						<phase>validate</phase>
						<goals>
							<goal>revision</goal>
						</goals>
					</execution>
				</executions>
				<configuration>
					<dateFormat>yyyyMMdd-HHmmss</dateFormat>
					<dateFormatTimeZone>Etc/UTC</dateFormatTimeZone>
					<dotGitDirectory>${project.basedir}/../.git</dotGitDirectory>
					<generateGitPropertiesFile>false</generateGitPropertiesFile>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.codehaus.mojo</groupId>
				<artifactId>properties-maven-plugin</artifactId>
				<version>${properties-maven-plugin.version}</version>
				<executions>
					<execution>
						<phase>generate-resources</phase>
						<goals>
							<goal>write-project-properties</goal>
						</goals>
						<configuration>
							<outputFile>${project.build.outputDirectory}/buildinfo/joptcorebuildinfo.properties</outputFile>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<groupId>org.jacoco</groupId>
				<artifactId>jacoco-maven-plugin</artifactId>
				<version>${jacoco-maven-plugin.version}</version>
				<executions>
					<execution>
						<goals>
							<goal>prepare-agent</goal>
						</goals>
					</execution>
					<execution>
						<id>report</id>
						<phase>prepare-package</phase>
						<goals>
							<goal>report</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

		</plugins>
	</build>
</project>
