gpt4 book ai didi

java - Gradle 生成 Eclipse 项目 EAR 项目

转载 作者:行者123 更新时间:2023-12-02 09:19:06 31 4
gpt4 key购买 nike

我正在将旧项目从 ant 迁移到 gradle(以使用其依赖项管理和构建功能),并且在生成 时遇到问题>eclipse 项目。今天的大问题是因为该项目有一些子项目被拆分成 war 和 jar 包部署到单个 ear 中。这是 ant 今天制作的。为了使用 gradle,我将 eclipse 项目拆分为单独的 jar 和 war 项目。所以我有以下结构:

ProjectRoot
-lib
-Project1.jar
-Project1.war
-Project2.jar
-Project3.war

这是我的 gradle 文件:

apply plugin: 'ear'
def jboss_home = '/home/augusto/Development/servers/jboss6X'
def deploy_name = 'default'

allprojects {
repositories {
mavenCentral()
}
apply plugin: 'eclipse'
apply plugin: 'eclipse-wtp'
}

dependencies {
deploy project(path: 'Project1.jar', configuration: 'archives')
deploy project(path: 'Project1.war', configuration: 'archives')
deploy project(path: 'Project2.jar', configuration: 'archives')
deploy project(path: 'Project2.war', configuration: 'archives')
earlib fileTree(dir: 'lib', include: '*.jar')
}

ear {
libDirName = "lib"
deploymentDescriptor {
applicationName = "MyApp"
initializeInOrder = true
displayName = "MyApp"
module("Project1.jar", "java")
module("Project2.jar", "java")
webModule("Project1.war", "/Project1")
webModule("Project2.war", "/Project2")
}
}

project('MyJarLib') {
apply plugin: 'java'
dependencies {
compile files('../lib/ajar.jar')
compile fileTree(dir: jboss_home + '/common/lib', include: '*.jar')
compile fileTree(dir: jboss_home + '/client', include: '*.jar')
compile fileTree(dir: jboss_home + '/lib', include: '*.jar')
compile fileTree(dir: jboss_home + '/server/' + deploy_name + '/lib', include: '*.jar')
}
}

project('Project1.jar') {
apply plugin: 'java'
dependencies {
compile 'org.apache.poi:poi:3.2-FINAL', 'jdom:jdom:1.1'
compile project(':MyJarLib.jar')
}
}

project('Project1.war') {
apply plugin: 'war'
}

project('Project2.jar') {
apply plugin: 'java'
dependencies {
compile 'net.sf.jasperreports:jasperreports:3.7.0', 'jdom:jdom:1.1'
compile project(':MyJarLib.jar')
}
}

project('Project2.war') {
apply plugin: 'war'
}

我已将 ear 插件放入子项目中,以使用 eclipse 将其部署到服务器。如果我只让 jar,我无法使用 eclipse 将其部署到服务器(我想这样做是为了使用 jboss 6 的热部署功能)。由于 ant 构建,我们的团队在维护此应用程序时遇到了很大的生产力问题。测试一个功能需要将近 15 分钟,因为他们不能使用热部署......eclipse 的问题:它在部署中不会生成单个 ear。它单独部署包,服务器部署失败。gradle 构建的问题:它正在生成正确的结构,但它在每个 jar 项目内创建 application.xml 文件(因为 Ear 插件)。我仅使用根application.xml。你能帮我解决这两个问题吗?谢谢。

编辑

我已经成功地使用评论中的提示让 Eclipse 正确部署了我的项目。在所有 java 项目中我都放置了此配置:

apply plugin: 'ear'
ear.onlyIf { false }
ear {
//appDirName 'src/main/java'
libDirName '../lib'
}

sourceSets {
main {
java {
srcDir 'src/main/application'
}
}
}
eclipse.wtp.facet {
facet name: 'jst.ejb', version: '3.1'
facet name: 'java', version: '1.6'
}
eclipse.classpath.file{
withXml {
def nodes = it.asNode().children().findAll{it.@kind == 'lib'}
nodes.each {
if(it.attributes[0] == null)
it.appendNode('attributes').appendNode('attribute', [name:'org.eclipse.jst.component.dependency', value: '../lib'])
else
it.attributes[0].attribute[0].@value = '../lib'
}
}
}

我已经安装了ear插件,因此gradle生成了准备在eclipse中部署的项目。 ear.onlyIf { false } 使 gradle 不会在 Ear 结构中生成工件。之后,我更改了 eclipse 首选项以将项目的方面设置为 EJB,并更改了类路径条目以将依赖项部署在ear lib 目录中,而不是ear 的根目录中。我现在的问题是从 gradle 构建。当我调用 gradle Ear 时,由于 Web 容器库不在类路径中,它会生成大量依赖项错误...所以我有很多 classnotfound 异常。如果我将所有类作为我的项目的依赖项,它将扰乱 Eclipse 类路径(和部署)。问题是:是否有一种方法可以为 gradle 中的 java 项目提供提供的依赖项,是否有一种简单的方法可以从 jboss 提供所有这些 jar,而不是每个 jar?

最佳答案

我已经成功完成了所有工作。使用我的问题编辑部分和此article的一些要点中的解决方法。这是我必须做的:

configurations {
provided
}

sourceSets {
main {
compileClasspath += configurations.provided
compileClasspath += configurations.compile
compileClasspath += configurations.runtime
java {
srcDir 'src/main/application'
}
}
}

这使得我可以在所有项目的依赖项中使用提供的内容,并且不会与 Eclipse 项目混淆。

关于java - Gradle 生成 Eclipse 项目 EAR 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26938205/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com