标签: classpath

用于填充数据库的一次性grails脚本

更新:从Grails 1.3.6开始,可以从Gant脚本访问完整域.从Grails 1.3.6发行说明:

您现在可以使用run-script命令从命令行运行一个或多个Groovy脚本,例如

grails run-script [path-to-script-1] [path-to-script-2] ... [path-to-script-n]

这解决了Gant脚本中无法方便地访问应用程序类的问题,因为脚本启动时它们在类路径中不可用.


大家好,

我是新手使用Grails(在一个真实的项目中),我有一个我需要执行的一次性脚本,它读取一个文件,然后填充我的数据库.

我希望脚本在我的grails应用程序的上下文中运行,所以我使用了create-script命令.我现在明白这使它成为一个'Gant'脚本.这样做的原因是我认为它可以让我轻松访问所有grails域的优点,这样我就可以轻松地做到这样的事情:

Car car = new Car(model: 'bar', brand: 'Ford')
car.save()
Run Code Online (Sandbox Code Playgroud)

在这里,Car是我的一个域类,我从文件中检索到了字符串'bar'和'Ford'.

我的脚本的开头看起来像这样:

import com.foo.Car    
grailsHome = Ant.project.properties."environment.GRAILS_HOME"
includeTargets << new File ( "${grailsHome}/scripts/Bootstrap.groovy" )
target(main: "a script for storing cars") {
    depends(bootstrap, classpath) // code dealing with the file with cars follows
Run Code Online (Sandbox Code Playgroud)

令人惊讶的是,java.lang.NoClassDefFoundError: com.foo.Car当我使用命令执行脚本时,groovy给了我一个grails LoadCars

我采取了错误的方法,还是有一些更简单的我做错了?

任何帮助表示赞赏

environment grails classpath gant

5
推荐指数
2
解决办法
2449
查看次数

如何将pom中的依赖项加载到eclipse项目的classpath中?

我正在使用带有m2eclipse插件的eclipse helios.对于从CVS检出的maven项目,我如何告诉eclipse从pom中提到的依赖项中自动获取该项目所需的所有jar.

谢谢你的时间

eclipse dependencies classpath pom.xml maven

5
推荐指数
1
解决办法
2万
查看次数

Eclipse"Open Type"窗口显示为double

当我在Eclipse中打开"打开类型"窗口时,ctrl + shift + T,我看到同一类型多次出现.类型具有完全相同的包和名称.为什么会这样做,我该如何解决?

eclipse types classpath

5
推荐指数
1
解决办法
960
查看次数

ClassNotFoundException:ear文件中的org.jaxen.JaxenException

我对这里发生的事情感到困惑.我一直得到以下异常:

Caused by: java.lang.ClassNotFoundException: org.jaxen.JaxenException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
        ... 51 more
Run Code Online (Sandbox Code Playgroud)

然而,这个类文件在我耳边,也在我的ejb清单和我耳朵的清单文件的'Class-Path'属性中.有没有其他地方我需要添加jaxen jar让它被耳朵里的其他jar看到?耳朵里的所有罐子都有相同的类路径吗?

编辑#1

这也有:

Caused by: java.lang.NoClassDefFoundError: org/jaxen/JaxenException
        at org.dom4j.DocumentFactory.createXPath(DocumentFactory.java:230)
        at org.dom4j.tree.AbstractNode.createXPath(AbstractNode.java:207)
        at org.dom4j.tree.AbstractNode.selectNodes(AbstractNode.java:164)
Run Code Online (Sandbox Code Playgroud)

编辑#2

我正在部署到glassfish v3.1并且lib jar位于ear文件的根目录,如下所示:

-foo.ear
--\META-INF
--lib1.jar
--lib2.jar
--jaxen-1.1.1.jar
Run Code Online (Sandbox Code Playgroud)

编辑#3

我已经尝试部署到另一个版本的GF,它似乎工作,我认为它可能是我正在使用的版本中的一个错误.我在这里开了一个论坛帖子.

编辑#4

我在app服务器lib目录中有dom4j但在服务器上没有jaxen.添加jaxen lib修复此问题.

java classpath java-ee

5
推荐指数
1
解决办法
2万
查看次数

如何永久地将类路径添加到我的Mac终端?

我想为以下目录永久设置我的路径:

/Users/syalam/Library/android-sdk-mac_86/platform-tools
Run Code Online (Sandbox Code Playgroud)

不知道如何从终端做到这一点.我试过了:

export PATH=$PATH:/Users/syalam/Library/android-sdk-mac_86/platform-tools
Run Code Online (Sandbox Code Playgroud)

但它只是暂时的.关闭我的shell之后它就不再存在了.

macos bash shell terminal classpath

5
推荐指数
1
解决办法
1万
查看次数

java.class.path没有带来Manifest.mf Class-Path属性

我正在尝试获取我的应用程序类路径.

我有一个jar(名为application.jar),它在Manifest.mf中有其他jar文件,比如Class-Path: a.jar b.jar.

为什么当我使用System.getProperty("java.class.path")我的罐子a.jar和b.jar没有列出?

java manifest.mf classpath

5
推荐指数
1
解决办法
1578
查看次数

eclipse外部工具配置 - >类路径中引用的库不存在:org.eclipse.swt

更新到最新的eclipse火星发布后

版本:Mars Release Candidate 1(4.5.0RC1)
Build id:20150521-1252

我无法启动任何Ant脚本.它总是会导致以下错误:

ErrorDialog

首先,我检查了路径是否真的正确,并确保特定的jar org.eclipse.swt.win32.win32.x86_64_3.104.0.v20150513-1901.jar存在于给定位置,它确实存在.经过一番挖掘后,我在外部工具配置中注意到以下内容:

ExternalToolsConfiguration

不知何故,我认为eclipse无法使用库中url中给定的'%20'标记来解析类路径.通常只有一个空白.恢复默认值始终填写此特定库的'%20'.

所以我在一个没有空白的位置创建了一个eclipse副本,一切正常.

不幸的是,我宁愿保留位置,所以有没有办法正确解决附加任务和支持的类路径?

java eclipse ant classpath

5
推荐指数
1
解决办法
2286
查看次数

在EAP 6.4.0中使用JPA 2.1

到目前为止,我没有成功地搜索了这个问题的解决方案.

我们正在将我们的应用程序迁移到EAP 6.4.0,我们的应用程序依赖于JPA 2.1.但是,JBoss是一个Java EE 6服务器,因此包含模块形式的JPA 2.0.

我尝试将JPA API jar直接包含在我的WEB-INF/lib目录中,认为类加载器比系统中的那个更喜欢这个.

我试图在我的耳朵中包含一个jboss-deployment-structure.xml文件.我在耳朵/ META-INF,ear/war/META-INF和ear/war/WEB-INF下试了一下.

在jboss-deployment-structure.xml文件中,我尝试:排除javax.persistence.api模块使用JPA 2.1创建我自己的模块并向其添加依赖项,排除jpa子系统

我还尝试在位于jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main下的javax.persistence.api module.xml文件中将export属性设置为false.

我尝试从standalone.xml中删除jpa子系统.

所有这些都导致了JPA 2.0 jar的使用.

我让它工作的唯一方法是替换模块目录中的实际jar(jboss-eap-6.4.0\modules\system\layers\base\javax\persistence\api\main).但这不是一个有效的解决方案,因为服务器中的其他应用程序或服务实际上可能需要旧版本的API.

有没有办法正确地做到这一点(没有迁移到另一台服务器,也没有更改代码)?

jboss jpa classpath classloader

5
推荐指数
1
解决办法
3395
查看次数

在Java 9模块路径和类路径之间拆分Gradle依赖项:自动模块

我遵循了Gradle指南来构建Java 9模块,从而使一个简单的基于Java 9的库项目成为现实。特别是,我按照指南中的建议手动设置了模块路径,如下所示:

ext.moduleName = 'com.foo.bar' 

compileJava {
    inputs.property("moduleName", moduleName)
    doFirst {
        options.compilerArgs = [
            '--module-path', classpath.asPath,
        ]
        classpath = files()  
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这只是获取我的整个类路径(由Gradle从我的依赖图中确定),并将其移到模块路径中。

除了一个简单的问题以外,一切工作都很好。我的某些依赖项(例如 org.jetbrains.kotlin:kotlin-stdlib-1.2.10)不是真正的Java 9模块,因为它们缺少module-info.class。它的优良坚持他们的类路径上或模块路径,因为,现在,java将它们转换成所谓的自动模块。

问题就出现了,因为即使是一个自动模块,如果是我的模块的道路上,我需要参考它在requires指令中我的项目的模块。但是由于我-Xlint:all选择了Java编译器,因此会javac产生以下警告:

/path/to/myproject/foo-module/src/main/java/module-info.java:26: warning: requires directive for an automatic module
    requires kotlin.stdlib;
                   ^
Run Code Online (Sandbox Code Playgroud)

这个警告对我来说是站不住脚的,因为我也随该-Werror javac标志滚动,因此它使我的构建失败。

因此,似乎我需要将自动模块推送到我的类路径上,并仅在模块路径上保留“ true”模块依赖项...

是否有任何通用或半通用的方式(即未与依赖项名称耦合)在编译器类路径及其模块路径之间拆分我的依赖项?

classpath gradle java-platform-module-system java-9 module-path

5
推荐指数
0
解决办法
675
查看次数

Maven:如何在&gt; = Java 9中向模块路径添加依赖项

以下示例项目a:

project-a
-src/main/
         -java/
              -test/
                   -Test.java
              module-info.java
         -resources
...
pom.xml
Run Code Online (Sandbox Code Playgroud)

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>test1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>javax.json</groupId>
            <artifactId>javax.json-api</artifactId>
            <version>1.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish</groupId>
            <artifactId>javax.json</artifactId>
            <version>1.1.4</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
Run Code Online (Sandbox Code Playgroud)

module-info.java:

module test1 {
    exports test;
    requires transitive java.json;
}
Run Code Online (Sandbox Code Playgroud)

当我运行eclipse [项目> maven>更新项目]时,所有依赖项都添加到类路径中。但是工件javax.json-api必须位于modulepath(api是模块)上,另一个必须位于classpath(该api的实现不是模块)上。

我该怎么做呢?

(我正在使用Eclipse 2018-12,OpenJDK 11和Maven 3.6.0)

类Test的示例代码:

package test;

import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;

import javax.json.Json; …
Run Code Online (Sandbox Code Playgroud)

java eclipse classpath maven java-11

5
推荐指数
1
解决办法
955
查看次数