2017-09-27 45 views
3

我尝试使用JDK 9和Gradle构建已经存在的项目。Gradle - Java 9 - spring-data-ja

我想我有一个模块加载的问题。

这里是我的gradle这个依赖的一个样本:

java.lang.NoClassDefFoundError: javax/transaction/SystemException 

所以一个溶液还包括:

compile("org.springframework:spring-context:${spring_version}"){ 
    exclude group: 'commons-logging', module: 'commons-logging' 
} 
compile("org.springframework.data:spring-data-jpa:${spring_data_version}"){ 
    exclude group: 'commons-logging', module: 'commons-logging' 
} 

compile ("org.apache.commons:commons-dbcp2:${commons_dbcp2_version}"){ 
    exclude group: 'commons-logging', module: 'commons-logging' 
} 
compile ("org.hibernate:hibernate-entitymanager:${hibernate_version}"){ 
    exclude group: 'org.jboss.spec.javax.transaction' 
} 

compile ("org.hibernate:hibernate-java8:${hibernate_version}"){ 
    exclude group: 'org.jboss.spec.javax.transaction' 
} 

当我尝试建立,我运行测试时出现以下错误以下依赖关系:

compile "javax.transaction:jta:1.1" 

而且构建现在退出,出现模块重复错误l IKE在此:

error: module flyway.core reads package javax.transaction.xa from both jta and java.sql 
error: module hibernate.jpa reads package javax.transaction.xa from both jta and java.sql 
error: module hibernate.entitymanager reads package javax.transaction.xa from both jta and java.sql 

我也试图包括选项--add模块java.se.ee,但它仍然无法正常工作。

恢复我的问题:我需要在我的module-info.java中有java.sql,但我还需要javax.transaction:jta依赖关系jar,并且此jar与java.sql模块发生冲突。

任何帮助将不胜感激!

+0

我试过gradle这个文档中发现的配置:https://guides.gradle.org/building-java-9-modules/, 在建。的gradle: 'afterEvaluate { compileJava { doFirst { options.compilerArgs = [ '--module路径',classpath.asPath, ] } }' –

+0

其实我试图许多配置添加的模块,我也在'build.gr中试过这个adle': 'tasks.withType(AbstractCompile){ options.compilerArgs + = [ “--add模块”, “java.se.ee”] } tasks.withType(试验){ jvmArgs + = [“--add-modules”,“java.se.ee”] }' –

+0

这些问题没有说明它无法找到模块/软件包。它从两个(可能是自动的)模块中读取包。您可以从其中的任何一个中排除它,而保持其他仍然为您提供所需功能的另一个。 – nullpointer

回答

2

这个问题并没有说明它无法找到模块/包。它从两个(可能的自动)模块中读取包装。您可以从其中的任何一个中排除它,而保持其他仍然为您提供所需功能的另一个。

所以目前,您可以通过包括解决这个问题 -

exclude group: 'javax.transaction.xa', module: 'moduleBringingThisPackage' 

其中'moduleBringingThisPackage'可以通过扫描模块的依赖关系层次中出现。


我虽然不是在gradle这个很好,但找到moduleBringingThisPackage,您可以使用

gradle dependencies 

,列出由您的顶级依赖关系,并进一步带来的依赖性you can exclude the dependency,他们在javax.transaction.xa中添加了他们。


编辑:用更新的问题,我觉得有一个较短的版本吧。

(1)当我尝试建立,我运行测试时出现以下错误:

java.lang.NoClassDefFoundError: javax/transaction/SystemException

(2)因此,一个解决方案是还包括以下依赖性:

compile "javax.transaction:jta:1.1"

不要做的步骤(2)从上面,而是只需添加

{ options.compilerArgs += ["--add-modules", "java.se.ee"] } 

build.gradle文件在这个时间点

+0

感谢您的回复。 问题是,xa软件包在javax.transaction:jta依赖项中,我不能仅从jar本身排除软件包。 –

+0

而且我还需要根据需要在我的module-info.java中创建模块java.sql,因为我需要一个'javax.sql.DataSource' –

+0

@SamClarenc您应该排除任何一个'javax.transaction.xa'模块,而不是两者。你不需要排除模块,但是从最高级别的依赖进来的传递依赖 – nullpointer