当前位置: 首页 > 知识库问答 >
问题:

Eclipse Buildship(Gradle插件)可以根据它的依赖关系更新我的java项目库路径配置吗?

谷越
2023-03-14

我正在将我的Java(EJB项目)和Eclipse中的Dynamic Web项目迁移到Gradle。我正在使用Buildship。我的项目有一个Eclipse库配置,维护起来很痛苦。对于等级,这很好,因为我只是将这些“依赖项”添加到build.gradle文件中……等等。你知道。没关系。

我的问题是,我是否可以使用Gradle中的Eclipse插件来重新配置eclipse中项目的Build路径,并删除旧的Eclipse库,并让Eclipse中的项目基于Gradle下载的相同jar作为依赖项构建,因此如果我更改其中一个依赖项的版本,Eclipse编译器也将基于新的jar依赖项编译代码。谢谢。

我编辑以添加文件:

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
        <name>ElizaTourismEJB</name>
        <comment></comment>
        <projects>
        </projects>
        <buildSpec>
                <buildCommand>
                        <name>org.eclipse.jdt.core.javabuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.wst.common.project.facet.core.builder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.jboss.tools.jst.web.kb.kbbuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.jboss.tools.cdi.core.cdibuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.wst.validation.validationbuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.hibernate.eclipse.console.hibernateBuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
                <buildCommand>
                        <name>org.eclipse.buildship.core.gradleprojectbuilder</name>
                        <arguments>
                        </arguments>
                </buildCommand>
        </buildSpec>
        <natures>
                <nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
                <nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
                <nature>org.eclipse.wst.common.project.facet.core.nature</nature>
                <nature>org.eclipse.jdt.core.javanature</nature>
                <nature>org.jboss.tools.jst.web.kb.kbnature</nature>
                <nature>org.jboss.tools.cdi.core.cdinature</nature>
                <nature>org.hibernate.eclipse.console.hibernateNature</nature>
                <nature>org.eclipse.buildship.core.gradleprojectnature</nature>
        </natures>
</projectDescription>

.class路径:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
        <classpathentry kind="src" path="src/main/java">
                <attributes>
                        <attribute name="FROM_GRADLE_MODEL" value="true"/>
                </attributes>
        </classpathentry>
        <classpathentry kind="src" path="src/test/java">
                <attributes>
                        <attribute name="FROM_GRADLE_MODEL" value="true"/>
                </attributes>
        </classpathentry>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8/"/>
        <classpathentry kind="con" path="org.eclipse.buildship.core.gradleclasspathcontainer">
                <attributes>
                        <attribute name="org.eclipse.jst.component.nondependency" value=""/>
                </attributes>
        </classpathentry>
        <classpathentry kind="con" path="org.eclipse.jst.j2ee.internal.module.container"/>
        <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Jackson2"/>
        <classpathentry kind="lib" path="commons-collections4-4.1.jar"/>
        <classpathentry kind="lib" path="/ElizaTourismREST/WebContent/WEB-INF/lib/freemarker.jar"/>
        <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Redis"/>
        <classpathentry kind="con" path="org.eclipse.jst.server.core.container/com.ibm.ws.st.core.runtimeClasspathProvider/WebSphere Application Server Liberty Profile 16003">
                <attributes>
                        <attribute name="owner.project.facets" value="jst.ejb;jpt.jpa"/>
                </attributes>
        </classpathentry>
        <classpathentry kind="lib" path="/Developer/java-lib/aspirin-0.11.01.jar"/>
        <classpathentry kind="src" path=".apt_generated">
                <attributes>
                        <attribute name="optional" value="true"/>
                </attributes>
        </classpathentry>
        <classpathentry kind="output" path="target/bin"/>
</classpath>

build.gradle:

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    jcenter()
    mavenCentral()
}

ext {
    swagger_annotations_version = "1.5.9"
}

dependencies {
    compile 'org.slf4j:slf4j-api:1.7.21'

    testCompile 'junit:junit:4.12'

    compile group: 'javax', name: 'javaee-api', version:'7.0'
    compile "io.swagger:swagger-annotations:$swagger_annotations_version"
    compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.5.4'
    compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-jaxb-annotations', version: '2.5.4'
    compile group: 'biz.paluch.redis', name: 'lettuce', version: '4.3.0.Final'
    compile group: 'org.masukomi', name: 'aspirin', version: '0.11.01'
    compile group: 'org.freemarker', name: 'freemarker', version: '2.3.23'

}

共有1个答案

郎弘壮
2023-03-14

我认为您不需要或不想在Gradle中使用eclipseClasspath任务。Buildship应该为您维护正确的项目配置。

问题是您仍然在项目生成路径中手动添加了库。例如,Jackson、Commons Collections、Redis等。这些应该删除,只剩下Gradle管理的“项目和外部依赖项”库。项目的生成路径库基本上应如下所示:

看看它是如何包含构建中的几个库的。项目和外部依赖项下的gradle文件,例如commons集合和slf4j?

以这种方式设置构建路径后,您可以让构建器更新/管理 Eclipse 项目设置,而不是要求 Gradle 执行此操作:在对 build.gradle 进行更改后,右键单击项目并选择“Gradle”。

如果Bulidship可以在< code>build.gradle发生变化时自动执行这一操作,那就太好了,但我怀疑这样做的性能可能会有问题。

 类似资料:
  • 问题内容: 是否可以在Gradle(在Android Studio中)中指定对当前项目边界之外的另一个gradle项目的依赖关系?例如,相对路径如下所示: 所以我想的是这样的: 我有一个Android应用程序。结构如下: MyApp(路径为/ Users / foo / workspace / MyApp) 应用程序(路径为/ Users / foo / workspace / MyApp / a

  • 一个项目在Google App Engine上运行。该项目具有依赖项,该依赖项使用的类由于安全限制而无法在应用程序引擎上调用(它不在白名单上)。我(非常有黑客感)的解决方案是将该类的修改版本复制到我的项目中(匹配原始类的名称和包),而不需要受限类。这在dev和live上都适用,我假设是因为我的源代码出现在外部依赖项之前的类路径中。 为了让它更干净一些,我决定将该类的修改版本放入它自己的项目中,该项

  • 我在我的Eclipse中有一个简单的gradle项目。我更新了build.gradle以包含一些apache http JAR... 但是,在我的代码中,我引用了一些Apache HTTP内容: 我试着做一次清洁,但那不起作用。我的gradle插件是:

  • 我的示例项目按预期工作,但我不希望我需要将依赖项定义为和两次。 shadow=>依赖项作为运行时DEP添加到发布的pom中(参见代码) implementation=>用于编译项目本身的依赖项,例如在您的IDE中。

  • 问题内容: 我正在使用gradle / intellij-idea开发一个多模块项目,这是我的项目主页的结构: 如您所见,我有多个子项目(全部为Java),如何使它们依赖于某些公共资源(“数据”项目,该项目不包含任何代码,仅包含资源),以及它们各自的资源? 同样,最好是intellij-idea可以使用JetGradle自动选择这些依赖项(JetGradle可以很好地选择每个子项目中的默认grad

  • 问题内容: 我有一个Eclipse项目/工作区库,其中包含偶尔交付给客户的功能。我们都是研究人员,因此这是非常非正式的。我用文档制作了一个JAR和Word文件,并将其发送给他们。 我希望向他们发送一个JAR文件,其中仅包含他们实际需要的内容,以简化操作。如果他们需要类X,Y,Z和W,那么我将发送一个包含X,Y,Z和W以及依赖于它们的所有类的JAR文件。 现在,我正在以一种绝望的手动方式执行此操作(