Parent Pom get version of Child Pom/dependency - maven-2

I have a project like the following
mainProject - Multi Module Project structure:
pom.xml
newfolder/pom.xml
otherProject:
otherProject.pom.xml with mainProject.pom.xml as its parent pom and newFolder/pom.xml as a dependency.
see below:
mainProject pom.xml:
<groupId>test.test</groupId>
<artifactId>mainProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>newFolder</module>
</modules>
<dependency>
<groupId>test.test</groupId>
<artifactId>newFolder</artifactId>
<version>${project.version}</version>
</dependency>
newfolder/pom.xml:
<groupId>test.test</groupId>
<artifactId>newFolder</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>test.test</groupId>
<artifactId>mainProject/artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
otherProject:
<parent>
<groupId>test.test</groupId>
<artifactId>mainProject</artifactId>
<version>1.0-SNAPSHOT/version>
</parent>
<dependency>
<groupId>test.test</groupId>
<artifactId>newFolder</artifactId>
</dependency>
The problem is when I try to build otherProject it cannot find the version of newfolder because it is not pulling in the version of the project that I built it is still looking for newfolder 1.0-SNAPSHOT
Any help would be great!

I was able to get the behavior I was hoping for by adding ${project.parent.version} to the parent pom dependency. example:
<groupId>test.test</groupId>
<artifactId>mainProject</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>newFolder</module>
</modules>
<dependency>
<groupId>test.test</groupId>
<artifactId>newFolder</artifactId>
<version>${project.parent.version}</version>
</dependency>

Related

OpenApi - required a bean of type 'org.springdoc.webmvc.ui.SwaggerIndexTransformer' that could not be found

I'm adding Swagger to my Spring Webflux service with functional controller. First I was getting this error:
Description:
The bean 'swaggerWelcome', defined in class path resource
[org/springdoc/webflux/ui/SwaggerConfig.class], could not be
registered. A bean with that name has already been defined in class
path resource [org/springdoc/webmvc/ui/SwaggerConfig.class] and
overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting
spring.main.allow-bean-definition-overriding=true
So I added spring.main.allow-bean-definition-overriding=true to my application.properties file.
And now I'm getting this error:
Description:
Parameter 1 of method swaggerWebMvcConfigurer in
org.springdoc.webmvc.ui.SwaggerConfig required a bean of type
'org.springdoc.webmvc.ui.SwaggerIndexTransformer' that could not be
found.
Action:
Consider defining a bean of type
'org.springdoc.webmvc.ui.SwaggerIndexTransformer' in your
configuration.
Pom file:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.company/groupId>
<artifactId>service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- For all mvc and web functions -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!-- Default persistence functions -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-r2dbc</artifactId>
</dependency>
<dependency>
<groupId>dev.miku</groupId>
<artifactId>r2dbc-mysql</artifactId>
<version>0.8.2.RELEASE</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-ui</artifactId>
<version>1.5.9</version>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-webflux-ui</artifactId>
<version>1.5.9</version>
</dependency>
</dependencies>
</project>
The application.properties file contains:
spring.main.allow-bean-definition-overriding=true
Is there a way to avoid this configuration? What is purpose the of the SwaggerIndexTransformer? Because in the website https://springdoc.org/#getting-started they say that "No additional configuration is needed".
The error was that in the pom file the only dependency should be springdoc-openapi-webflux-ui

RabbitConnectionFactory maven dependency

which dependencies that I need in order to use RabbitConnectionFactory? I have the below pom, but RabbitConnectionFactory cannot be resolved:
<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>
<groupId>test.rabbit</groupId>
<artifactId>connector</artifactId>
<version>0.0.1-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.4.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-cloudfoundry-connector</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-spring-service-connector</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-cloudfoundry-connector</artifactId>
</dependency>
</dependencies>
My repo is here:
https://github.com/pkid/rabbitconnectionfac
Thank you for your help in advance!
There is no such class RabbitConnectionFactory.
Where are you seeing an error?
With spring-rabbit, you would generally use its CachingConnetionFactory. It uses an underlying ConnectionFactory from the amqp-client library, which is a transitive dependency.
spring-cloud-service-connector, in RabbitConnectionFactoryCreator creates instances of these objects.

Apache Pig Java UDF - import org.apache.pig.EvalFunc; cannot be resolved

Eclipse is showing the error message import org.apache.pig.EvalFunc; cannot be resolved.How can I get rid of this error ? Below is the POM file
<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>
<groupId>Pig</groupId>
<artifactId>PigUDF</artifactId>
<version>0.0.1-SNAPSHOT</version>
<repositories>
<repository>
<id>cloudera-repo-releases</id>
<url>https://repository.cloudera.com/artifactory/repo</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-core</artifactId>
<version>1.2.1</version>
</dependency>
</dependencies>
<build>
</build>
</project>
Add pig dependency to your POM file
<dependency>
<groupId>org.apache.pig</groupId>
<artifactId>pig</artifactId>
<version>0.15.0</version><!-- or any version you want -->
</dependency>
EvalFunc class is imported from Pig Packages. So You need to add the pig dependency in pom.xml.
<!-- https://mvnrepository.com/artifact/org.apache.pig/pig -->
<dependency>
<groupId>org.apache.pig</groupId>
<artifactId>pig</artifactId>
<version>0.13.0</version>
</dependency>

Maven configuration error : repo.maven.apache.org

I am trying to create a simple java project using maven.
But I am getting one error in the problems tab with the maven configuration.
The error description is "repo.maven.apache.org"
The error type is "maven configuration" problem.
Can any one help ?
Here is my pom.
<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>
<groupId>com.bhawani.sample.maven</groupId>
<artifactId>FirstSimpleSpringProject</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>FirstSimpleSpringProject</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.0.6.RELEASE</version>
</dependency>
</dependencies>
</project>
In case you have not already tried, try to build your project from command prompt, you will get what exactly you are missing. Additionally, need to verify if provided local repository path has been provided and if you are building it offline/behind company proxy server, add proper proxy setting as well.

Maven doesn't interpret all properties in some child poms

We are working on quite big project with many modules and we use maven 2.2.1 to build it.
We have declared some properties in master pom.xml for having dependency version in one place.
This is how this part of our pom.xml looks like:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.common</groupId>
<artifactId>caoas</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<name>AS :: caoas</name>
<modules>
<module>common</module>
<module>services</module>
<module>datamanagement</module>
</modules>
<properties>
<jslee.version>1.1</jslee.version>
<rhino.version>2.1</rhino.version>
<diameterro.ra.version>2.2.0.1</diameterro.ra.version>
<cdr.ra.version>2.1.1.0</cdr.ra.version>
<cgin.ra.version>1.3.2</cgin.ra.version>
<cgin.oc-common.version>1.3.0</cgin.oc-common.version>
<cgin.in-datatypes.version>5.1.3.2</cgin.in-datatypes.version>
<ra.tracelevel>Finest</ra.tracelevel>
</properties>
...
</project>
We use those properties in few modules and in most of them they are interpreted correctly but there is an issue with one in which only some are interpreted and some are not.
Here's part of that pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.services</groupId>
<artifactId>moc-sbb</artifactId>
<version>1.0.1</version>
<packaging>jainslee-sbb-jar</packaging>
<name>AS :: services :: MOC-SBB</name>
<parent>
<groupId>com.blah.as.services</groupId>
<artifactId>moc</artifactId>
<version>1.0.1</version>
</parent>
<dependencies>
<dependency>
<groupId>opencloud</groupId>
<artifactId>diameter-ro-ra-type</artifactId>
<version>${diameterro.ra.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>oc-common</artifactId>
<version>${cgin.oc-common.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>in-datatypes</artifactId>
<version>${cgin.in-datatypes.version}</version>
<scope>provided</scope>
</dependency>
...
<dependency>
<groupId>opencloud</groupId>
<artifactId>map_rel4.ratype</artifactId>
<version>${cgin.ra.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.blah.as</groupId>
<artifactId>correlation-ra-ratype</artifactId>
<version>1.0</version>
<type>jainslee-ratype-jar</type>
</dependency>
</project>
All properties starting with 'cgin' are not interpreted in this pom.xml (the work fine in other modules) other properties are fine.
The whole build has worked perfectly, but recently we had to change modules version, so change affected current module version, parent module version and some dependencies version but those were only local dependencies with version written explicitly.
Have anyone cone across such problem or have any idea where to search for reason fir such situation?
br
Lucja
edit1
I have used mvn -X -U clean install to look more into the build and have found no significant error, the only thig I have found is that in some modules there is expression "properties used" and in some it's not present, the problematic module also doesn't have it. I don't know how it would affect this module, because only some properties are not read and some are.
[DEBUG] properties used {... cgin.oc-common.version=1.3.0, ... cgin.ra.version=1.3.2, ... cdr.ra.version=2.1.1.0, ... diameterro.ra.version=2.2.0.1, ... cgin.in-datatypes.version=5.1.3.2, ...}
edit2
Here's the whole pom.xml for module 'moc'
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.services</groupId>
<artifactId>moc</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<name>AS :: services :: MOC</name>
<parent>
<groupId>com.blah.as.services</groupId>
<artifactId>services</artifactId>
<version>1.0.1</version>
</parent>
<modules>
<module>moc-sbb</module>
<module>moc-du</module>
</modules>
</project>
and for module services
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.services</groupId>
<artifactId>services</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<name>AS :: services</name>
<parent>
<groupId>com.blah.as.common</groupId>
<artifactId>caoas</artifactId>
<version>1.0.0</version>
</parent>
<modules>
<module>moc</module>
<module>ussd</module>
</modules>
</project>
module structure in this case looks like this:
caoas (root)
|
services
|
moc
|
moc-sbb
Here's example for another module in which properties work fine (structure shown from root to leaf node)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.common</groupId>
<artifactId>common</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<name>AS :: Common</name>
<parent>
<groupId>com.blah.as.common</groupId>
<artifactId>caoas</artifactId>
<version>1.0.1</version>
</parent>
<modules>
<module>lib</module>
<module>ra</module>
<module>utils</module>
<module>patches</module>
</modules>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.common</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<name>AS :: Common :: libs</name>
<parent>
<groupId>com.blah.as.common</groupId>
<artifactId>common</artifactId>
<version>1.0.1</version>
</parent>
<modules>
<module>base</module>
<module>tracing</module>
<module>commons</module>
<module>diameter-ro-ext</module>
<module>location-retrieval</module>
<module>normalization</module>
<module>ticketing</module>
<module>profiles</module>
<module>notifications</module>
<module>screening</module>
<module>soap-tools</module>
<module>fsm</module>
<module>xmlbeans</module>
<module>sccp-address-selection</module>
</modules>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.blah.as.common</groupId>
<artifactId>location-retrieval</artifactId>
<version>1.0.1</version>
<packaging>pom</packaging>
<name>AS :: Common :: Location Retrieval</name>
<parent>
<groupId>com.blah.as.common</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.1</version>
</parent>
<modules>
<module>location-retrieval-profiles-api</module>
<module>location-retrieval-intf-lib</module>
<module>location-retrieval-sbb-jar</module>
<module>location-retrieval-du</module>
</modules>
<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>
<parent>
<groupId>com.blah.as.common</groupId>
<artifactId>location-retrieval</artifactId>
<version>1.0.1</version>
</parent>
<groupId>com.blah.as.common</groupId>
<artifactId>location-retrieval-sbb-jar</artifactId>
<version>1.0.1</version>
<packaging>jainslee-sbb-jar</packaging>
<name>AS :: Common :: Location Retrieval SBB</name>
<dependencies>
<dependency>
<groupId>com.blah.as.common</groupId>
<artifactId>base-api</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.blah.as.common</groupId>
<artifactId>location-retrieval-intf-lib</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>com.blah.as.common</groupId>
<artifactId>location-retrieval-profiles-api</artifactId>
<version>1.0.1</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>oc-common</artifactId>
<version>${cgin.oc-common.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>in-datatypes</artifactId>
<version>${cgin.in-datatypes.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>cgin-common.ratype</artifactId>
<version>${cgin.ra.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>cgin-common.events</artifactId>
<version>${cgin.ra.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>cgin-common</artifactId>
<version>${cgin.ra.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>map_rel4.api</artifactId>
<version>${cgin.ra.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>map_rel4.events</artifactId>
<version>${cgin.ra.version}</version>
</dependency>
<dependency>
<groupId>opencloud</groupId>
<artifactId>map_rel4.ratype</artifactId>
<version>${cgin.ra.version}</version>
</dependency>
<dependency>
<groupId>com.blah.as.common</groupId>
<artifactId>base-tracing-intf</artifactId>
<version>1.0.1</version>
<type>jar</type>
</dependency>
</dependencies>
It uses the same properties and here they work fine.
Your services pom refers to com.blah.as.common:caoas:1.0.0 as its parent. In your post, you showed us version 1.0.1, not 1.0.0. Perhaps the property doesn't exist in version 1.0.0?
I always determine dependencies versions in root pom. And not determine versions in child projects. Child projects get dependency versions from parent pom by default.
E. g.
Parent pom:
...
<groupId>ba.server</groupId>
<artifactId>ba-server</artifactId>
<packaging>pom</packaging>
<name>ba-server</name>
<version>0.16.22-SNAPSHOT</version>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jzmq</artifactId>
<version>2.1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>proxool</groupId>
<artifactId>proxool </artifactId>
<version>0.8.3</version>
</dependency>
...
Child pom:
...
<parent>
<groupId>ba.server</groupId>
<artifactId>ba-serer</artifactId>
<version>0.16.22-SNAPSHOT</version>
</parent>
<packaging>jar</packaging>
<modelVersion>4.0.0</modelVersion>
<artifactId>ba-server-kernel</artifactId>
<name>ba-server-kernel</name>
<dependencies>
<dependency>
<groupId>org.zeromq</groupId>
<artifactId>jzmq</artifactId>
</dependency>
...
It looks that your child module refers to a wrong parent POM. In your parent POM you have declared the artifactId as 'caoas':
<artifactId>caoas</artifactId>
But in your child POM you refer to another parent, with artifactId 'moc':
<parent>
<groupId>com.blah.as.services</groupId>
<artifactId>moc</artifactId>
<version>1.0.1</version>
</parent>