- У меня есть 3 модуля maven, и 1 модуль содержит 2 структуры пакета (например, com.organizationname.analysis, com.organizationname.inetgration)
- Пакет com.organizationname.inetgration содержит класс обслуживания и класс репозитория.
- Я хочу поделиться этими классами пакетов с другим модулем.
- Для этого я создал банку этого модуля
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar</goal>
</goals>
<configuration>
<classifier>client</classifier>
<includes>
<include>com/orgname/integration/**</include>
<include>com/orgname/common/**</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
Затем я скопировал этот Jar-файл вручную в папку «Ресурсы» других модулей и включил в качестве зависимости от System
<dependency>
<groupId>com.orgname.integration</groupId>
<artifactId>sample-clientapp</artifactId>
<version>${revision}</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/lib/sample-clientapp-0.1.0-SNAPSHOT.jar</systemPath>
</dependency>
Теперь, когда я использую класс обслуживания в субмодуле из этого Jar, приложение не запускается и жалуется
*************************** APPLICATION FAILED TO START ***************************
Description:
Parameter 0 of constructor in com.example.module.service.SampleService required a bean of type 'com.orgname.integration.service.ConfigService' that could not be found.
Ниже мой configService
@Service
public class ConfigService {
private final ConfigMapper configMapper;
private final ConfigRepository configRepository;
@Autowired
public ConfigurationService(ConfigMapper configMapper, ConfigRepository configRepository) {
this.configMapper = configMapper;
this.configRepository = configRepository;
}
}
В файле Jar нет основного метода, он также содержит конфигурацию ниже
@config
@EnableTransactionManagement
@EnableJpaRepositories(
basePackages = {"com.orgname.integration.repository"},
entityManagerFactoryRef = "configEntityManagerFactory",
transactionManagerRef = "configTransactionManager")
public class Repoconfig {
@Autowired private DataSource dataSource;
@Bean(name = "configEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean configEntityManagerFactory(EntityManagerFactoryBuilder builder) {
return builder.dataSource(dataSource).packages("com.orgname.integration.entity").build();
}
@Bean(name = "configTransactionManager")
public PlatformTransactionManager appTransactionManager(
@Qualifier("configEntityManagerFactory") LocalContainerEntityManagerFactoryBean entityManagerFactoryBean) {
return new JpaTransactionManager(entityManagerFactoryBean.getObject());
}
}