Pro*_*mer 7 java maven java-platform-module-system java-9 java-10
我正在将我的项目从Java 8迁移到Java 9.我的项目是mavenised.现在,为了迁移到Java 9,我计划创建一个单独的模块目录,其中模块的所有必需依赖项都将用于此目录.
为了通过maven这样做,我知道的唯一方法是使用maven的复制插件来复制模块目录中所有必需的依赖项.因此,在为模块运行maven安装后,依赖的jar将被复制到repository文件夹(默认情况下),并且还会复制到此模块目录文件夹中.
因此,将会有一个jar副本以及pom.xml中的硬编码,用于复制模块目录中的特定依赖项.
这种方法似乎并不干净,是否有任何出路是自动maven可以读取我的module-info.java文件并复制所需的依赖项不在类路径中但在指定的目录中
这是我的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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.aa.bb</groupId>
<artifactId>cc</artifactId>
<version>0.0.1</version>
<relativePath>../../pom.xml</relativePath>
</parent>
<artifactId>dd</artifactId>
<name>dd</name>
<groupId>com.aa.cc</groupId>
<version>1.0.0</version>
<properties>
<maven.compiler.source>10</maven.compiler.source>
<maven.compiler.target>10</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<release>10</release>
<compilerArgs>
<arg>--module-path</arg>
<arg>./moduledir</arg>
</compilerArgs>
</configuration>
<dependencies>
<dependency>
<groupId>org.ow2.asm</groupId>
<artifactId>asm</artifactId>
<version>6.2</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
Run Code Online (Sandbox Code Playgroud)
module-info.java
module com.some_module_name {
requires com.fasterxml.jackson.core;
requires com.fasterxml.jackson.databind;
requires org.apache.commons.codec;
requires spring.beans;
requires spring.context;
}
Run Code Online (Sandbox Code Playgroud)
将module-info.java添加到现有的java 10模块并运行maven后,我遇到的问题是"在模块a和模块b中使用了包存在".
我相信在运行maven时它正在寻找.m2 /存储库中的模块依赖,并且那里有大量的jar,因为m2./repository对于我的多个模块是常见的.
所以我打算做的是为每个模块创建一个单独的模块目录,并将该模块所需的jar放入其中,它甚至可以工作.
我假设您正在努力确保Maven"对模块和类路径做"正确的事情",即将模块的直接依赖关系置于前者以及后者的所有其他依赖关系.如果是这样的话,那么您无需做任何事情 - 从版本3.7开始,Maven编译器插件会在您添加module-info.java到src/main/java目录后立即为您完成.
您可以通过在调试模式下运行Maven来验证mvn clean compile -X.仔细分析输出时,您将看到哪些JAR最终在哪条路径上.
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |