2017-09-14 47 views
13

我正在用maven和构建我的项目。我已在我的pom.xml文件:- 仅在编译时添加模块

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>${maven-compiler-plugin.version}</version> 
    <configuration> 
     <source>${java.version}</source> 
     <target>${java.version}</target> 
     <compilerArgs> 
      <arg>--add-modules</arg> 
      <arg>java.xml.bind</arg> 
     </compilerArgs> 
    </configuration> 
</plugin> 

但尽管如此,跑我有这样运行它的应用程序:

java -jar --add-modules java.xml.bind my-app.jar 

有构建应用程序,从运行方式命令行没有--add-modules java.xml.bind到java命令行参数?

+0

移开我的想法,但也许错误,你在'maven-compiler-plugin'中所做的只是编译器'javac',它也被maven用来编译你的项目,但不是用于运行时'java',所以你必须添加'--add-modules '到java运行时'java'。 – Tiina

+0

这是正确的,这就是为什么我问问题如何运行而不添加'--add-modules'。 – wbk

回答

19

前一段时间我制作了this answer,我回答了这个问题,作为使用Maven在Java-9中公开非java.se包的附加信息。

添加的部分特别关注使用独立版本的 java.xml.* API。为了适应这种情况,你可能会开始消费对的依赖关系,它可以作为一个模块加载,也可以从类路径中执行。你需要做的改变是将以下内容添加到您的依赖列表:

<dependency> 
    <groupId>javax.xml.bind</groupId> 
    <artifactId>jaxb-api</artifactId> 
    <version>2.3.0</version> 
</dependency> 

这样可以确保迁移到独立的模块API以及从deprecated piece of code.