Dependency z jednego projektu w innym

0

Mam dwie apki w Spring boot i chciałbym używać modelu którego klasa jest fizycznie w App1 w App2.
Zbudowałem jar App1 i mam to w lokalnym repo m2. Dodałem zależność do projektu w którym chce używać modelu:

 <dependency>
            <groupId>pl.some</groupId>
            <artifactId>Warehouse</artifactId>
            <version>0.0.1-SNAPSHOT</version>
  </dependency>

niestety dostaje taki błąd:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/Userrrr/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[7,35] package pl.some.Warehouse.model does not exist

W klasie w której używam modelu wszystko bez problemów się importuje. Pytanie w jaki sposób mając dwie apki w Spring boot i Mavena wspóldzielić modele między te apki ?

0

Zalacz oba pom.xml i zrob zdjecie/wypisz w jakich pakietach masz dane klasy
Cos ewidentnie poknociles.

0

Pom aplikacji w której mam fizycznie model klasy:

<?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>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>pl.some</groupId>
	<artifactId>Warehouse</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>
	<name>Warehouse</name>
	<description>Demo project for Spring Boot</description>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.kafka</groupId>
			<artifactId>spring-kafka</artifactId>
		</dependency>

		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.kafka</groupId>
			<artifactId>spring-kafka-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>
		<!--Service-->
		
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

0

Pom aplikacji do której dodałem zależność do Warehouse :

<?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>pl.some</groupId>
    <artifactId>ConversionOfMass</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>ConversionOfMass</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
            <scope>provided</scope>
        </dependency>

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

        <dependency>
            <groupId>pl.some</groupId>
            <artifactId>Warehouse</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>1.3-RC1-groovy-2.5</version>
            <scope>test</scope>
        </dependency>

    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>


</project>

0

Błąd przy mvn clean install

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building ConversionOfMass 0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ ConversionOfMass ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ ConversionOfMass ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 9 source files to C:\Users\SomeUser\IdeaProjects\ConversionOfMass\target\classes
[INFO] -------------------------------------------------------------
[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[7,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[8,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[9,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[21,18] cannot find symbol
  symbol:   class Clay
  location: class pl.some.ConversionOfMass.model.Mass
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[22,20] cannot find symbol
  symbol:   class Quartz
  location: class pl.some.ConversionOfMass.model.Mass
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[23,23] cannot find symbol
  symbol:   class Kaolinite
  location: class pl.some.ConversionOfMass.model.Mass
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[14,1] cannot find symbol
  symbol:   class Clay
  location: class pl.some.ConversionOfMass.model.Mass.MassBuilder
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[6,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[7,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[8,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[24,12] cannot find symbol
  symbol:   class Clay
  location: class pl.some.ConversionOfMass.rest.RawMeterialsConsumer
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[28,12] cannot find symbol
  symbol:   class Quartz
  location: class pl.some.ConversionOfMass.rest.RawMeterialsConsumer
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[32,12] cannot find symbol
  symbol:   class Kaolinite
  location: class pl.some.ConversionOfMass.rest.RawMeterialsConsumer
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[4,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[5,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[6,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[13,19] cannot find symbol
  symbol:   class Quartz
  location: class pl.some.ConversionOfMass.storage.Storage
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[14,19] cannot find symbol
  symbol:   class Kaolinite
  location: class pl.some.ConversionOfMass.storage.Storage
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[15,19] cannot find symbol
  symbol:   class Clay
  location: class pl.some.ConversionOfMass.storage.Storage
[INFO] 19 errors 
[INFO] -------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.096 s
[INFO] Finished at: 2019-02-02T19:44:30+01:00
[INFO] Final Memory: 33M/280M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project ConversionOfMass: Compilation failure: Compilation failure:
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[7,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[8,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[9,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[21,18] cannot find symbol
[ERROR] symbol:   class Clay
[ERROR] location: class pl.some.ConversionOfMass.model.Mass
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[22,20] cannot find symbol
[ERROR] symbol:   class Quartz
[ERROR] location: class pl.some.ConversionOfMass.model.Mass
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[23,23] cannot find symbol
[ERROR] symbol:   class Kaolinite
[ERROR] location: class pl.some.ConversionOfMass.model.Mass
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/model/Mass.java:[14,1] cannot find symbol
[ERROR] symbol:   class Clay
[ERROR] location: class pl.some.ConversionOfMass.model.Mass.MassBuilder
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[6,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[7,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[8,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[24,12] cannot find symbol
[ERROR] symbol:   class Clay
[ERROR] location: class pl.some.ConversionOfMass.rest.RawMeterialsConsumer
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[28,12] cannot find symbol
[ERROR] symbol:   class Quartz
[ERROR] location: class pl.some.ConversionOfMass.rest.RawMeterialsConsumer
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/rest/RawMeterialsConsumer.java:[32,12] cannot find symbol
[ERROR] symbol:   class Kaolinite
[ERROR] location: class pl.some.ConversionOfMass.rest.RawMeterialsConsumer
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[4,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[5,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[6,35] package pl.some.Warehouse.model does not exist
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[13,19] cannot find symbol
[ERROR] symbol:   class Quartz
[ERROR] location: class pl.some.ConversionOfMass.storage.Storage
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[14,19] cannot find symbol
[ERROR] symbol:   class Kaolinite
[ERROR] location: class pl.some.ConversionOfMass.storage.Storage
[ERROR] /C:/Users/SomeUser/IdeaProjects/ConversionOfMass/src/main/java/pl/some/ConversionOfMass/storage/Storage.java:[15,19] cannot find symbol
[ERROR] symbol:   class Clay
[ERROR] location: class pl.some.ConversionOfMass.storage.Storage
[ERROR] -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

Process finished with exit code 1

2

Nie da rady, bo Spring boot jest głupi od wersji 2.0
W skrócie: boot przepakowuje ci te moduły do takiej śmiesznej struktury katalogów która NIE JEST kompatybilna z używanie jara jako zależności. W efekcie nie da się, przynajmniej bez trochę czary-mary w pomie, używać aplikacji bootowej jako zależności.

Rozwiazanie, które zresztą i tak powinieneś był zastosować (!) to wydzielenie osobnego modułu dla tych klas opisujących dane i interfejsy.Wciąganie CAŁEJ APLIKACJI jako zależności to jest chory pomysł niezależnie od sytuacji. Zrób z tego multi-module maven project i niech jeden moduł to będzie aplikacja, a inny moduł (niezależny w ogóle od boota czy jakiegokolwiek frameworku (!)) to będą te twoje commonsy z interfejsami i data classami.

0

Wywal spring-boot-maven-plugin z modułu z modelami.

Wydaje mi się, że spring-boot-plugin buduje Ci jar z modelami po swojemu, niezgodnie z konwencją Mavena. Jest to wygodne dla Springa, ale Maven ślepnie.

EDIT:
Jeżeli te dwa moduły czy tam apki są uruchamialne to pozostaje CI wyniesienie modeli do osobnego jara, I zaimportowanie go w dwóch apkach.

0

@Shalom: ja tez własnie miałem taki problem tylko jak używałem gradla. Gdy dawałem w submodule gradla zaleznośc do projektu spring-bootowego z innego submodułu to nie widziało klas, ale jak zaciągałem tak samo z normalnego submodułu to było ok. Musiałem bardzo dziwne work-aroundy robić ;]

0

@scibi92: Z drugiej strony dobrze, że to nie działa, bo później Twoja aplikacja ważyłaby 2 GB, bo każdy moduł byłby fat jarem.

0

To akurat było tylko na potrzeby testów więc nie taki duży problem ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1