Executable JAR unable to find Liquibase db/changelog.xml - spring-boot
The project runs as expected with spring-boot:run. However, the executable JAR fails to run because it cannot find db/changelog.xml.
The following steps can be used to reproduce the problem:
run mvn package from project root
go to target folder
run java -jar executable-jar-with-liquibase-1.0.0-SNAPSHOT.jar
The log will now show an error because the table domain has not been created.
Note that the application.yml is found, since if liquibase.enabled is set to false, it will refuse to run entirely (as it should).
application.yml
server:
context-path: /api
spring:
datasource:
platform: h2
url: jdbc:h2:mem:testdb;MODE=PostgreSQL;DB_CLOSE_ON_EXIT=FALSE
jackson:
date-format: yyyy-MM-dd
jpa:
database-platform: org.hibernate.dialect.PostgreSQLDialect
hibernate:
ddl-auto: none
liquibase:
enabled: false
change-log: classpath:db/changelog.xml
The generated JAR has the following contents:
.
|____BOOT-INF
| |____classes
| | |____application.yml
| | |____db
| | | |____changelog.xml
| | | |____changelogs
| | | | |____changelog_000.xml
| | |____nl
| | | |_____42
| | | | |____app
| | | | | |____ApplicationConfig.class
| | | | | |____domain
| | | | | | |____Domain.class
| | | | | | |____DomainController.class
| | | | | | |____DomainRepository.class
| | | | | | |____DomainService.class
| | | | | |____shared
| | | | | | |____AbstractEntity.class
| | | | | |____WebAppConfig.class
| | | | | |____WebApplication.class
| |____lib
| | |____accessors-smart-1.1.jar
| | |____antlr-2.7.7.jar
| | |____asm-5.0.3.jar
| | |____aspectjweaver-1.8.9.jar
| | |____assertj-core-2.5.0.jar
| | |____classmate-1.3.1.jar
| | |____dom4j-1.6.1.jar
| | |____h2-1.4.192.jar
| | |____hamcrest-core-1.3.jar
| | |____hamcrest-library-1.3.jar
| | |____hibernate-commons-annotations-5.0.1.Final.jar
| | |____hibernate-core-5.0.11.Final.jar
| | |____hibernate-entitymanager-5.0.11.Final.jar
| | |____hibernate-jpa-2.1-api-1.0.0.Final.jar
| | |____hibernate-validator-5.2.4.Final.jar
| | |____jackson-annotations-2.8.3.jar
| | |____jackson-core-2.8.3.jar
| | |____jackson-databind-2.8.3.jar
| | |____jackson-datatype-jsr310-2.8.3.jar
| | |____jandex-2.0.0.Final.jar
| | |____javassist-3.20.0-GA.jar
| | |____javax.transaction-api-1.2.jar
| | |____jboss-logging-3.3.0.Final.jar
| | |____jcl-over-slf4j-1.7.21.jar
| | |____json-20140107.jar
| | |____json-path-2.2.0.jar
| | |____json-smart-2.2.1.jar
| | |____jsonassert-1.3.0.jar
| | |____jul-to-slf4j-1.7.21.jar
| | |____liquibase-core-3.5.1.jar
| | |____log4j-over-slf4j-1.7.21.jar
| | |____logback-classic-1.1.7.jar
| | |____logback-core-1.1.7.jar
| | |____mockito-core-1.10.19.jar
| | |____objenesis-2.1.jar
| | |____slf4j-api-1.7.21.jar
| | |____snakeyaml-1.17.jar
| | |____spring-aop-4.3.3.RELEASE.jar
| | |____spring-aspects-4.3.3.RELEASE.jar
| | |____spring-beans-4.3.3.RELEASE.jar
| | |____spring-boot-1.4.1.RELEASE.jar
| | |____spring-boot-autoconfigure-1.4.1.RELEASE.jar
| | |____spring-boot-configuration-processor-1.4.1.RELEASE.jar
| | |____spring-boot-devtools-1.4.1.RELEASE.jar
| | |____spring-boot-starter-1.4.1.RELEASE.jar
| | |____spring-boot-starter-aop-1.4.1.RELEASE.jar
| | |____spring-boot-starter-data-jpa-1.4.1.RELEASE.jar
| | |____spring-boot-starter-jdbc-1.4.1.RELEASE.jar
| | |____spring-boot-starter-logging-1.4.1.RELEASE.jar
| | |____spring-boot-starter-test-1.4.1.RELEASE.jar
| | |____spring-boot-starter-tomcat-1.4.1.RELEASE.jar
| | |____spring-boot-starter-web-1.4.1.RELEASE.jar
| | |____spring-boot-test-1.4.1.RELEASE.jar
| | |____spring-boot-test-autoconfigure-1.4.1.RELEASE.jar
| | |____spring-context-4.3.3.RELEASE.jar
| | |____spring-core-4.3.3.RELEASE.jar
| | |____spring-data-commons-1.12.3.RELEASE.jar
| | |____spring-data-jpa-1.10.3.RELEASE.jar
| | |____spring-expression-4.3.3.RELEASE.jar
| | |____spring-jdbc-4.3.3.RELEASE.jar
| | |____spring-orm-4.3.3.RELEASE.jar
| | |____spring-tx-4.3.3.RELEASE.jar
| | |____spring-web-4.3.3.RELEASE.jar
| | |____spring-webmvc-4.3.3.RELEASE.jar
| | |____tomcat-embed-core-8.5.5.jar
| | |____tomcat-embed-el-8.5.5.jar
| | |____tomcat-embed-websocket-8.5.5.jar
| | |____tomcat-jdbc-8.5.5.jar
| | |____tomcat-juli-8.5.5.jar
| | |____validation-api-1.1.0.Final.jar
| | |____xml-apis-1.4.01.jar
|____META-INF
| |____MANIFEST.MF
| |____maven
| | |____nl.mad
| | | |____executable-jar-with-liquibase
| | | | |____pom.properties
| | | | |____pom.xml
|____org
| |____springframework
| | |____boot
| | | |____loader
| | | | |____archive
| | | | | |____Archive$Entry.class
| | | | | |____Archive$EntryFilter.class
| | | | | |____Archive.class
| | | | | |____ExplodedArchive$1.class
| | | | | |____ExplodedArchive$FileEntry.class
| | | | | |____ExplodedArchive$FileEntryIterator$EntryComparator.class
| | | | | |____ExplodedArchive$FileEntryIterator.class
| | | | | |____ExplodedArchive.class
| | | | | |____JarFileArchive$EntryIterator.class
| | | | | |____JarFileArchive$JarFileEntry.class
| | | | | |____JarFileArchive.class
| | | | |____data
| | | | | |____ByteArrayRandomAccessData.class
| | | | | |____RandomAccessData$ResourceAccess.class
| | | | | |____RandomAccessData.class
| | | | | |____RandomAccessDataFile$DataInputStream.class
| | | | | |____RandomAccessDataFile$FilePool.class
| | | | | |____RandomAccessDataFile.class
| | | | |____ExecutableArchiveLauncher$1.class
| | | | |____ExecutableArchiveLauncher.class
| | | | |____jar
| | | | | |____AsciiBytes.class
| | | | | |____Bytes.class
| | | | | |____CentralDirectoryEndRecord.class
| | | | | |____CentralDirectoryFileHeader.class
| | | | | |____CentralDirectoryParser.class
| | | | | |____CentralDirectoryVisitor.class
| | | | | |____FileHeader.class
| | | | | |____Handler.class
| | | | | |____JarEntry.class
| | | | | |____JarEntryFilter.class
| | | | | |____JarFile$1.class
| | | | | |____JarFile$2.class
| | | | | |____JarFile$3.class
| | | | | |____JarFile$JarFileType.class
| | | | | |____JarFile.class
| | | | | |____JarFileEntries$1.class
| | | | | |____JarFileEntries$EntryIterator.class
| | | | | |____JarFileEntries.class
| | | | | |____JarURLConnection$1.class
| | | | | |____JarURLConnection$JarEntryName.class
| | | | | |____JarURLConnection.class
| | | | | |____ZipInflaterInputStream.class
| | | | |____JarLauncher.class
| | | | |____LaunchedURLClassLoader$1.class
| | | | |____LaunchedURLClassLoader.class
| | | | |____Launcher.class
| | | | |____MainMethodRunner.class
| | | | |____PropertiesLauncher$1.class
| | | | |____PropertiesLauncher$ArchiveEntryFilter.class
| | | | |____PropertiesLauncher$FilteredArchive$1.class
| | | | |____PropertiesLauncher$FilteredArchive.class
| | | | |____PropertiesLauncher$PrefixMatchingArchiveFilter.class
| | | | |____PropertiesLauncher.class
| | | | |____util
| | | | | |____SystemPropertyUtils.class
| | | | |____WarLauncher.class
The entire project can be found here: https://github.com/robert-bor/executable-jar-with-liquibase
What am I doing wrong here?
there used to be a problem with the includeAll tag in liquibase, see this issue. It should be fix meanwhile, but at the moment I could not make it run with the includeAll tag.
As a solution for your problem use:
<include file="classpath:db/changelogs/changelog_000.xml" relativeToChangelogFile="false"/>
Related
Using Spring #Value annotation results in field not initialized error in Eclipse
I am currently developing a Spring Boot application in the Eclipse IDE with a Connection class which needs to know which data source to connect to. I decided to let it know this property from Spring's application.properties, through the #Value annotation: #Value("${project.datasource}") private final DataSource DATA_SOURCE; where DataSource is an enum representing the possible data sources. However, in this method, I get a "Blank final field DATA_SOURCE may not have been initialized" error: private DBConnection() throws SQLException { ConnectionConfig config = new ConnectionConfig(DATA_SOURCE); connection = DriverManager.getConnection(config.getUrl(), config.getUSERNAME(), config.getPASSWORD()); } Inserting a default value doesn't work, either: #Value("${project.datasource:POSTGRE_LOCAL}") still gives the same error. I tried to install the Spring Tools 4 plugin for Eclipse to check if this was just Eclipse not understanding the #Value annotation's implications, but it seems like this isn't the case. How do I solve this problem? Am I misunderstanding the implications myself? application.properties: project.datasource = POSTGRE_LOCAL Project tree: | .classpath | .gitignore | .project | HELP.md | mvnw | mvnw.cmd | pom.xml | +---.mvn | \---wrapper | maven-wrapper.jar | maven-wrapper.properties | +---.settings | org.eclipse.core.resources.prefs | org.eclipse.jdt.core.prefs | org.eclipse.m2e.core.prefs | org.springframework.ide.eclipse.prefs | +---src | +---main | | +---java | | | \---org | | | \---ingsw21 | | | \---backend | | | +---connection | | | | DBConnection.java | | | | | | | +---controllers | | | | UserController.java | | | | | | | +---DAOs | | | | DAOUtente.java | | | | | | | +---DAOSQL | | | | DAOSQLUtente.java | | | | | | | +---entities | | | | Utente.java | | | | | | | +---enums | | | | DataSource.java | | | | | | | \---exceptions | | | BadRequestWebException.java | | | DataAccessException.java | | | | | \---resources | | application.properties | | | \---test | \---java | \---org | \---ingsw21 | \---backend | \---BackEnd | BackEndApplicationTests.java | \---target +---classes | | application.properties | | | \---org | \---ingsw21 | \---backend | +---connection | | DBConnection$ConnectionConfig.class | | DBConnection.class | | | +---controllers | | UserController.class | | | +---DAOs | | DAOUtente.class | | | +---DAOSQL | | DAOSQLUtente.class | | | +---entities | | Utente.class | | | +---enums | | DataSource.class | | | \---exceptions | BadRequestWebException.class | DataAccessException.class | \---test-classes \---org
You cannot add #Value to a final field. #Value("${project.datasource}") private DataSource DATA_SOURCE; should work just fine.
Reverse the "$" and "{". The expression syntax is "${...}".
Laravel 8 Route in blade
I have the following web routes in my Laravel project Route::resource('client/{client}/users', UserController::class); Route::resource('users', UserController::class); For the latter I am able to use {{ route('users.create') }} in my blade file, but I'm not sure what to put for the other one. I need to 2 ways separate resources because some users are able to edit users from their own client (/users) and users of other clients (/client/123/users) `php artisan route:list shows that I'm getting the same name for both. What's the correct way to name the clients-users resource? | | GET|HEAD | client/{client}/users | users.index | App\Http\Controllers\UserController#index | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | POST | client/{client}/users | users.store | App\Http\Controllers\UserController#store | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | GET|HEAD | client/{client}/users/create | users.create | App\Http\Controllers\UserController#create | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | PUT|PATCH | client/{client}/users/{user} | users.update | App\Http\Controllers\UserController#update | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | DELETE | client/{client}/users/{user} | users.destroy | App\Http\Controllers\UserController#destroy | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | GET|HEAD | client/{client}/users/{user} | users.show | App\Http\Controllers\UserController#show | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | GET|HEAD | client/{client}/users/{user}/edit | users.edit | App\Http\Controllers\UserController#edit | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | and | | GET|HEAD | users | users.index | App\Http\Controllers\UserController#index | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | GET|HEAD | users/create | users.create | App\Http\Controllers\UserController#create | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | DELETE | users/{user} | users.destroy | App\Http\Controllers\UserController#destroy | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | PUT|PATCH | users/{user} | users.update | App\Http\Controllers\UserController#update | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | GET|HEAD | users/{user} | users.show | App\Http\Controllers\UserController#show | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified | | | GET|HEAD | users/{user}/edit | users.edit | App\Http\Controllers\UserController#edit | web | | | | | | | App\Http\Middleware\Authenticate:sanctum | | | | | | | Illuminate\Auth\Middleware\EnsureEmailIsVerified |
The third arguement of the resource is an array of options, one of which allows you to specifiy a prefix. Route::resource('client/{client}/users', UserController::class, ['as' => 'clients']); Route::resource('users', UserController::class); Now your routes should be clients.users.{action} users.{action}
You need to give it a name. That said, I don't think you want Route::resource for that route. I'm gonna give it the name clients.users.index but you can give it whatever name you want. Route::get('clients/{client}/users', [ClientController::class, 'users'])->name('clients.users.index'); {{ route('clients.users.index') }} The way to handle nested resources would be to declare the route: Route::resource('clients.users', SomeOtherController::class);
pywinauto how to click on a pane?
Dialog - 'sample' (L585, T187, R1341, B716) ['Dialog', 'Sample', 'Sample'] child_window(title="Sivielliance Suite", control_type="Window") | | Pane - '' (L588, T213, R1338, B713) | ['Pane', 'Pane0', 'Pane1'] | | | | Pane - '' (L588, T213, R844, B673) | | ['Pane2'] | | | | Pane - '' (L588, T675, R1338, B713) | | ['Pane3'] | | | | | | Pane - '' (L588, T693, R1093, B694) | | | ['Pane4'] | | | | | | Pane - '' (L1093, T681, R1333, B706) | | | ['Pane5'] | | | | | | | | Pane - '' (L1255, T681, R1331, B706) | | | | ['Pane6'] | | | | | | | | Pane - '' (L1175, T681, R1251, B706) | | | | ['Pane7'] | | | | | | | | Pane - '' (L1095, T681, R1171, B706) | | | | ['Pane8'] | | | | Pane - '' (L588, T673, R1338, B675) | | ['Pane9'] | | | | | | Pane - '' (L588, T673, R1338, B675) | | | ['Pane10'] | | | | Pane - '' (L844, T271, R1338, B673) | | ['Pane11'] | | | | | | Pane - '' (L844, T271, R1338, B673) | | | ['Pane12'] | | | | | | | | Image - '' (L852, T286, R1330, B305) | | | | ['Image', 'Image0', 'Image1'] | | | | Pane - '' (L844, T213, R1338, B271) | | ['Pane13'] | | | | | | Image - '' (L854, T231, R1043, B252) | | | ['Image2'] | | TitleBar - '' (L604, T190, R1338, B213) | ['TitleBar'] | | | | Menu - 'System' (L593, T195, R615, B217) | | ['System', 'Menu', 'SystemMenu', 'System0', 'System1'] | | child_window(title="System", auto_id="MenuBar", control_type="MenuBar") | | | | | | MenuItem - 'System' (L593, T195, R615, B217) | | | ['System2', 'MenuItem', 'SystemMenuItem'] | | | child_window(title="System", control_type="MenuItem") | | | | Button - 'Minimize' (L1199, T188, R1246, B213) | | ['Button', 'MinimizeButton', 'Minimize', 'Button0', 'Button1'] | | child_window(title="Minimize", control_type="Button") | | | | Button - 'Maximize' (L1246, T188, R1292, B213) | | ['Button2', 'MaximizeButton', 'Maximize'] | | child_window(title="Maximize", control_type="Button") | | | | Button - 'Close' (L1292, T188, R1339, B213) | | ['CloseButton', 'Button3', 'Close'] | | child_window(title="Close", control_type="Button") I am unable to click on any of the child panes. Is there any solution for this? Control identifiers app.dlg.child_window(control_type="Pane",found_index=0).app.dlg.child_window(control_type="Pane",found_index=2).app.dlg.child_window(control_type="Pane",found_index=0).app.dlg.child_window(control_type="Pane",found_index=0).app.dlg.child_window(control_type="Pane",found_index=0).app.dlg.child_window(control_type="Pane",found_index=2).app.dlg.child_window(control_type="Pane",found_index=0).app.dlg.child_window(control_type="Pane",found_index=0).click_input()
Config Processing error circle-ci when I do build
I'm facing a problem with Config Processing error (circle-ci). Material that I use Aws cloud front aws s3 circle-ci situation I did set up on AWS and added value to Environment Variables (circle-ci ). I did commit on git and build on circle-ci and an error occurs and I could not get out this error. This is my repo error bin/sh -eo pipefail ERROR IN CONFIG FILE: [#/jobs] 8 schema violations found Any string key is allowed as job name. 1. [#/jobs/deploy-to-aws-cloudfront] 0 subschemas matched instead of one | 1. [#/jobs/deploy-to-aws-cloudfront] only 1 subschema matches out of 2 | | 1. [#/jobs/deploy-to-aws-cloudfront] 3 schema violations found | | | 1. [#/jobs/deploy-to-aws-cloudfront] required key [steps] not found | | | 2. [#/jobs/deploy-to-aws-cloudfront/docker/0] 2 schema violations found | | | | 1. [#/jobs/deploy-to-aws-cloudfront/docker/0] extraneous key [steps] is not permitted | | | | | Permitted keys: | | | | | - image | | | | | - name | | | | | - entrypoint | | | | | - command | | | | | - user | | | | | - environment | | | | | - aws_auth | | | | | - auth | | | | | Passed keys: | | | | | - image | | | | | - working_directory | | | | | - steps | | | | 2. [#/jobs/deploy-to-aws-cloudfront/docker/0] extraneous key [working_directory] is not permitted | | | | | Permitted keys: | | | | | - image | | | | | - name | | | | | - entrypoint | | | | | - command | | | | | - user | | | | | - environment | | | | | - aws_auth | | | | | - auth | | | | | Passed keys: | | | | | - image | | | | | - working_directory | | | | | - steps | 2. [#/jobs/deploy-to-aws-cloudfront] expected type: String, found: Mapping | | Job may be a string reference to another job 2. [#/jobs/deploy-to-aws-s3] 0 subschemas matched instead of one | 1. [#/jobs/deploy-to-aws-s3] only 1 subschema matches out of 2 | | 1. [#/jobs/deploy-to-aws-s3] 3 schema violations found | | | 1. [#/jobs/deploy-to-aws-s3] required key [steps] not found | | | 2. [#/jobs/deploy-to-aws-s3/docker/0] 2 schema violations found | | | | 1. [#/jobs/deploy-to-aws-s3/docker/0] extraneous key [steps] is not permitted | | | | | Permitted keys: | | | | | - image | | | | | - name | | | | | - entrypoint | | | | | - command | | | | | - user | | | | | - environment | | | | | - aws_auth | | | | | - auth | | | | | Passed keys: | | | | | - image | | | | | - working_directory | | | | | - steps | | | | 2. [#/jobs/deploy-to-aws-s3/docker/0] extraneous key [working_directory] is not permitted | | | | | Permitted keys: | | | | | - image | | | | | - name | | | | | - entrypoint | | | | | - command | | | | | - user | | | | | - environment | | | | | - aws_auth | | | | | - auth | | | | | Passed keys: | | | | | - image | | | | | - working_directory | | | | | - steps | 2. [#/jobs/deploy-to-aws-s3] expected type: String, found: Mapping | | Job may be a string reference to another job ------- Warning: This configuration was auto-generated to show you the message above. Don't rerun this job. Rerunning will have no effect. false
The reason that the Config processing error was ignoring schema on a circle-ci. In my case, that's an indentation error. https://github.com/CircleCI-Public/circleci-cli/issues/326 This post was helpful for solving my error.
SSRS 2005 Matrix Rows not grouping
I have a problem, The rows are not grouping properly and I am not sure if it is a dataset problem or reporting problem. In the example below how do I get the 'S003' rows to show in one row? Is there some grouping property not set correctly? This report is off the reporting wizard + some formating changes adn drill down. Using VS BI 2005. Dataset Year | Month | Cust | Item | Shipto | SaleCases | RegCases 2011 |||| 1 |||| DEM ||| B123 ||| S000 | | | | | 0 | | | | | | 54 2011 |||| 1 |||| DEM ||| B123 ||| S001 | | | | | 0 | | | | | | 54 2011 |||| 1 |||| DEM ||| B123 ||| S002 | | | | | 0 | | | | | | 54 2011 |||| 1 |||| DEM ||| B123 ||| S003 | | | | | 0 | | | | | | 54 2010 |||| 1 |||| DEM ||| B123 ||| S003 | | | 754 | | | | | | 0 Report | | | | | | | | | | | | | | | | | | | | | | | | 2010 | | | | | 2011 | | | | | | | | | | | | | | | | | | | | | | | | | | | 1 | | | | | | | | 1 | | | | | | | | | | | | | | | | | | | | Sale | Reg || Sale |Reg DEM | | B123 | S000 | | | | | | | | | | | | | | 0 | | 54 | | | | | | | | | | | | | S001 | | | | | | | | | | | | | | 0 | | 54 | | | | | | | | | | | | | S002 | | | | | | | | | | | | | | 0 | | 54 | | | | | | | | | | | | | S003 | | | | | | | | | | | | | | 0 | | 54 DEM | | B123 | S003 | | 754 | | 0 | | | | | | | | | | | | Why is it creating a new row/group for the last line and not attaching it to the third row? The only difference is the year.
Bah.. White space differences in shiptos. RTRIM() Fixed it.