Gradle构建脚本创建了一个EAR文件,其中包含一些JAR和一个war。这之前都是在Maven中完成的,现在是迁移到Gradle的主题。
...很简单:到目前为止,它是有效的——耳朵插件创建耳朵文件,其中包含来自
deploy project(:core)
在“dependencies”部分中,“core-0.0.1.jar”位于ear根目录下,并且已经在应用程序中创建了一个模块条目。xml。现在我发现ear文件中不包含运行库库。因此,我(根据docu)将纳入内容改为
earlib project(:core)
并在libs目录中找到libs,如ear插件配置中的“libDirName”属性所述。但现在应用程序中没有模块条目。xml和“core-0.0.1.jar”在libs目录中。
我们想要核心-0.0.1。jar作为ear根目录中的一个模块,以及libs目录中的所有运行时库——没有模块本身的jar!(core-0.0.1.jar不是战争!)就像这样。。。
[APP.EAR]
|--/libs
| |-- log4j.jar
| |-- commons.jar
| |>> app-core.0.0.1.jar <<== NOT !
|
|-app-core-0.0.1.jar <== OK!
|-app-xy-0.0.1.jar
|-app-abc-0.0.1.war
这是我对EAR概念的根本理解不足,还是为什么Gradle本身没有按照我们想要的方式行事?或者这个简单的小步骤可能需要更复杂的配置?
如果ear模块之间存在编译时依赖关系,则可接受的解决方案将失败。这就是我在Gradle 2.14中解决这个问题的方法。希望这对别人有帮助。
apply plugin: 'ear'
def deployedModules = [ 'projectA', 'projectB', 'projectC' ]
deployedModules.forEach {
def projectPath = ":${it}"
evaluationDependsOn(projectPath)
dependencies.add('deploy', dependencies.project(path: projectPath,
configuration: 'archives'))
findProject(projectPath).configurations.runtime.allDependencies.forEach {
boolean isEarModule = it instanceof ProjectDependency &&
(it as ProjectDependency).dependencyProject.name in deployedModules
if (!isEarModule) {
dependencies.add('earlib', it)
}
}
}
我自己找到了解决方案...在尝试了很多很多其他帖子的“解决方案”后。这是我所做的,它是其他的组合:
我创建了一个提供的配置——这样这些依赖项就不会出现在编译配置中——并将其添加到项目的类路径中。所以它们在编译类路径中,但不在编译配置中!我所有的项目都是这么做的。
// Libs need for compilation, but not to be published with EAR
configurations { provided }
dependencies {
provided 'javax:javaee-api:6.0'
provided 'org.slf4j:slf4j-api:1.7.7'
compile 'com.application:application-common:1.4.5-SNAPSHOT'
}
configurations.provided.each { logger.debug("PROVIDED::core: $it\n") }
// Include the PROVIDED libs into compile classpath
sourceSets {
main { compileClasspath += configurations.provided }
}
我必须包括“部署项目…”用于模块条目和根jar。对于可传递的lib,我使用了“earlib project…,configuration:'compile'”来确保只将编译配置中的文件(因此它们是运行jar所必需的)复制到ear中。
apply plugin: 'ear'
dependencies {
// INCLUDE AS A MODULE with entry in application.xml
deploy project(path: ':core')
// INCLUDE the TRANSITIVE LIBRARIES FOR RUNTIME not provided
earlib project(path: ':core', configuration: 'compile')
}
ear { ....
}
就这些!
为此我不得不说......分级摇滚!
问题内容: 如何对包含可选NSdate的可选数组进行排序? 如何根据dateCompleted对数组排序? 问题答案: 您的排序功能可以结合使用可选链接和nil合并运算符: 这将对值上的项目进行排序,所有和和一起的项目都被视为“在遥远的过去”,以便在所有其他项目之前对其进行排序。 Swift 3的 更新(假设是):
我有一个具有以下依赖结构的gradle项目: 这是由Jersey和ASM4.1之间的不兼容性引起的(Jersey使用3.3.1,它具有不同的组id),这是从另一个模块提取的传递依赖项。 顺便说一句,我知道Idea13有更好的Gradle集成,但是(a)我们有12的许可证,而且不会很快升级整个开发团队;(b)Idea13在多语Gradle项目(Java/Scala)方面仍然存在一些问题,所以它不符合
我试图在我的工作区中创建一个新的java项目。但我得到以下错误: ”重叠其他项目的位置”我目前的项目在: 如果我从Eclipse创建一个新项目,则新项目将位于: 我尝试了以下步骤来解决stackoverflow中其他帖子中提到的问题。com:Eclipse:错误“.与另一个项目的位置重叠..”尝试创建新项目时 但我无法解决这个问题。有人能帮忙吗?
问题内容: 我遇到了我认为应该是一个非常简单的问题。 我需要将arrayList中的每个项目与列表中的其他所有项目进行比较,而无需将项目与其自身进行比较。它不像调用equals()比较那样简单,它涉及一些自定义逻辑,我在下面的代码中省略了这些自定义逻辑。而且,ArrayList不应以任何方式更改。 我似乎遇到的问题是,一旦进入第二个循环,我就不知道是否有另一个对象要与之比较(因为它是一个可变大小的
问题内容: 我有一个Eclipse插件项目,它取决于我在Eclipse工作区中拥有的其他项目。在“ Java Build Path”->“ Projects”选项卡下添加项目依赖项,并在“ Order and Export”中选择项目后,我得到了java.lang.NoClassDefFoundError。 我假设其他项目未正确包含在插件中。有谁知道如何解决这一问题? 谢谢,詹姆斯 问题答案: E
我创建了一个带有jar打包的maven实用程序项目,在该项目中,我实现了EntityManager接口来管理数据库连接和其他内容。但当我想(从另一个maven项目)将其与@Inject一起使用时,它就不起作用了。 有没有办法指定要使用哪个EntityManager实现? 重要提示:如果我在主项目中包含这个实体管理器,它是有效的。但是我正在努力避免这种情况,因为将来我会有其他项目使用相同的数据库。