anchor.diff:     </pluginExecutions>
   </lifecycleMappingMetadata>
   
  -. Go to `Eclipse Preferences > Maven > Lifecycle Mappings`.Click *Browse* and select the path of the `lifecycle-mapping-metadata.xml` file
  -
  -. Build the project again (`Right click on killbill > Maven > Update Project > OK`)
  +. Go to `Window > Preferences > Maven > Lifecycle Mappings`.Click *Browse* and select the path of the `lifecycle-mapping-metadata.xml` file. Click `Apply and Close`
  +
  +. Build the project again (In Project Explorer, `Right click on killbill > Maven > Update Project > OK`)
   
   . This will get rid of all the build errors. Your Eclipse workspace should look like this:image:https://github.com/killbill/killbill-docs/raw/v3/userguide/assets/img/development/eclipse_workspace.png[align=center]
   
  
positive.code:          <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
        </encoder>
     </appender>
     <!-- JDBC appenders -->
     <appender name="SIFT-jdbc-sqlonly" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.killbill.billing.server.log.ThreadNameBasedDiscriminator" />
        <sift>
           <appender name="jdbc-sqlonly-${threadName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOGS_DIR:-./logs}/jdbc-sqlonly.${threadName}.out</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                 <!-- rollover daily -->
                 <fileNamePattern>${LOGS_DIR:-./logs}/jdbc-sqlonly-%d{yyyy-MM-dd}.%i.${threadName}.out.gz</fileNamePattern>
                 <maxHistory>3</maxHistory>
                 <cleanHistoryOnStart>true</cleanHistoryOnStart>
                 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                 </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
              <encoder>
                 <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
              </encoder>
           </appender>
        </sift>
     </appender>
     <appender name="SIFT-jdbc-sqltiming" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.killbill.billing.server.log.ThreadNameBasedDiscriminator" />
        <sift>
           <appender name="jdbc-sqltiming-${threadName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOGS_DIR:-./logs}/jdbc-sqltiming.${threadName}.out</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                 <!-- rollover daily -->
                 <fileNamePattern>${LOGS_DIR:-./logs}/jdbc-sqltiming-%d{yyyy-MM-dd}.%i.${threadName}.out.gz</fileNamePattern>
                 <maxHistory>3</maxHistory>
                 <cleanHistoryOnStart>true</cleanHistoryOnStart>
                 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                 </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
              <encoder>
                 <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
              </encoder>
           </appender>
        </sift>
     </appender>
     <appender name="SIFT-jdbc-audit" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.killbill.billing.server.log.ThreadNameBasedDiscriminator" />
        <sift>
           <appender name="jdbc-audit-${threadName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOGS_DIR:-./logs}/jdbc-audit.${threadName}.out</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                 <!-- rollover daily -->
                 <fileNamePattern>${LOGS_DIR:-./logs}/jdbc-audit-%d{yyyy-MM-dd}.%i.${threadName}.out.gz</fileNamePattern>
                 <maxHistory>3</maxHistory>
                 <cleanHistoryOnStart>true</cleanHistoryOnStart>
                 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                 </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
              <encoder>
                 <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
              </encoder>
           </appender>
        </sift>
     </appender>
     <appender name="SIFT-jdbc-resultset" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.killbill.billing.server.log.ThreadNameBasedDiscriminator" />
        <sift>
           <appender name="jdbc-resultset-${threadName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOGS_DIR:-./logs}/jdbc-resultset.${threadName}.out</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                 <!-- rollover daily -->
                 <fileNamePattern>${LOGS_DIR:-./logs}/jdbc-resultset-%d{yyyy-MM-dd}.%i.${threadName}.out.gz</fileNamePattern>
                 <maxHistory>3</maxHistory>
                 <cleanHistoryOnStart>true</cleanHistoryOnStart>
                 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                 </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
              <encoder>
                 <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
              </encoder>
           </appender>
        </sift>
     </appender>
     <appender name="SIFT-jdbc-resultsettable" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.killbill.billing.server.log.ThreadNameBasedDiscriminator" />
        <sift>
           <appender name="jdbc-resultsettable-${threadName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOGS_DIR:-./logs}/jdbc-resultsettable.${threadName}.out</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                 <!-- rollover daily -->
                 <fileNamePattern>${LOGS_DIR:-./logs}/jdbc-resultsettable-%d{yyyy-MM-dd}.%i.${threadName}.out.gz</fileNamePattern>
                 <maxHistory>3</maxHistory>
                 <cleanHistoryOnStart>true</cleanHistoryOnStart>
                 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                 </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
              <encoder>
                 <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
              </encoder>
           </appender>
        </sift>
     </appender>
     <appender name="SIFT-jdbc-connection" class="ch.qos.logback.classic.sift.SiftingAppender">
        <discriminator class="org.killbill.billing.server.log.ThreadNameBasedDiscriminator" />
        <sift>
           <appender name="jdbc-connection-${threadName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>${LOGS_DIR:-./logs}/jdbc-connection.${threadName}.out</file>
              <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                 <!-- rollover daily -->
                 <fileNamePattern>${LOGS_DIR:-./logs}/jdbc-connection-%d{yyyy-MM-dd}.%i.${threadName}.out.gz</fileNamePattern>
                 <maxHistory>3</maxHistory>
                 <cleanHistoryOnStart>true</cleanHistoryOnStart>
                 <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <!-- or whenever the file size reaches 100MB -->
                    <maxFileSize>100MB</maxFileSize>
                 </timeBasedFileNamingAndTriggeringPolicy>
              </rollingPolicy>
              <encoder>
                 <pattern>%date{"yyyy-MM-dd'T'HH:mm:ss,SSSZ", UTC} lvl='%level', log='%logger{0}', th='%thread', xff='%X{req.xForwardedFor}', rId='%X{req.requestId}', tok='%X{kb.userToken}', aRId='%X{kb.accountRecordId}', tRId='%X{kb.tenantRecordId}', %maskedMsg%n</pattern>
              </encoder>
           </appender>
        </sift>
     </appender>
     <!-- Logs only SQL. SQL executed within a prepared statement is automatically shown with it's bind arguments replaced with the data bound at that position, for greatly increased readability. -->
     <logger name="jdbc.sqlonly" level="OFF" additivity="false">
        <appender-ref ref="SIFT-jdbc-sqlonly" />
     </logger>
     <!-- Logs the SQL, post-execution, including timing statistics on how long the SQL took to execute. -->
     <logger name="jdbc.sqltiming" level="OFF" additivity="false">
        <appender-ref ref="SIFT-jdbc-sqltiming" />
     </logger>
     <!-- Logs ALL JDBC calls except for ResultSets. This is a very voluminous output, and is not normally needed unless tracking down a specific JDBC problem. -->
     <logger name="jdbc.audit" level="OFF" additivity="false">
        <appender-ref ref="SIFT-jdbc-audit" />
     </logger>
     <!-- Even more voluminous, because all calls to ResultSet objects are logged. -->
     <logger name="jdbc.resultset" level="OFF" additivity="false">
        <appender-ref ref="SIFT-jdbc-resultset" />
     </logger>
     <!-- Log the jdbc results as a table. Level debug will fill in unread values in the result set. -->
     <logger name="jdbc.resultsettable" level="OFF" additivity="false">
        <appender-ref ref="SIFT-jdbc-resultsettable" />
     </logger>
     <!-- Logs connection open and close events as well as dumping all open connection numbers. This is very useful for hunting down connection leak problems. -->
     <logger name="jdbc.connection" level="OFF" additivity="false">
        <appender-ref ref="SIFT-jdbc-connection" />
     </logger>
     <!-- See https://github.com/jOOQ/jOOQ/issues/4019 -->
     <logger name="org.jooq.Constants" level="OFF" />
     <!-- Silence verbose loggers in DEBUG mode -->
     <logger name="com.dmurph" level="OFF" />
     <logger name="org.eclipse" level="INFO" />
     <logger name="org.killbill.billing.server.updatechecker" level="INFO" />
     <!-- Useful loggers for debugging -->
     <logger name="org.killbill.billing.jaxrs.resources" level="INFO" />
     <logger name="org.killbill.notificationq" level="INFO" />
     <logger name="org.killbill.queue" level="INFO" />
     <root level="INFO">
        <appender-ref ref="MAIN" />
     </root>
  
negative.code: 
  . Click on *Clone a Git Repository and add the clone to this view*
  
  . In the Git Repository details, enter the Kill Bill Git URL https://github.com/killbill/killbill in the *URI* field. 
  
  .. If you want read-write access to the Kill Bill repository, Select *https* in the *Protocol* dropdown and enter your Git credentials in the *User/Password* fields . 
  .. If you do not have Git credentials or want a read-only access, you can Select *Git* in the *Protocol* Dropdown. This disables the credentials fields. However, this will clone the repository anonymously and give you a read only access to the repository. 
  
  .. Click *Next*
  
  . In the branch selection view, select the branch named *master* (By default, all the branches appear selected, you need to uncheck all branches except for *master*). Click *Next*
  
  . Select the path on your computer where you would like to clone the code. This path will be referred to as *PROJECT_ROOT* from now on). For example, if you choose `C:/MyProjects/KillBill`, *PROJECT_ROOT* refers to this path. Click *Finish* (This starts the cloning process and may take a while depending on your internet speed)
  
  
  ====  Creating an Eclipse Project
  