我试图使用axis-java2wsdl ant任务从我的一个java类创建一个wsdl,但是我无法使类路径正确.
我使用的是Ubuntu的libaxis-java软件包,它在$ ANT_HOME/lib中安装了axis-ant.jar,在/ usr/share/java中安装了axis.jar.我的build.xml的有趣部分如下所示:
<property name="library.dir" value="lib"/>
<property name="system.library.dir" value="/usr/share/java"/>
<path id="libraries">
<fileset dir="${library.dir}">
<include name="*.jar"/>
</fileset>
<fileset dir="${system.library.dir}">
<include name="*.jar"/>
</fileset>
</path>
<target name="genwsdl" depends="compile">
<taskdef resource="axis-tasks.properties" classpathref="libraries"/>
<axis-java2wsdl>
details omitted
</axis-java2wsdl>
</target>
Run Code Online (Sandbox Code Playgroud)
运行ant genwsdl结果:
/build.xml:50: taskdef A class needed by class
org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
cannot be found: org/apache/axis/utils/DefaultAuthenticator
Run Code Online (Sandbox Code Playgroud)
Ant能够找到axis-java2wsdl任务的定义,因为axis-ant.jar在$ ANT_HOME/lib中,但它无法在axis.jar中找到类,即使该jar位于"libraries"定义的路径上
我知道这是一个类路径问题,因为我能够通过符号链接axis.jar到$ ANT_HOME/lib中找不到其他类的DefaultAuthenticator.如何让taskdef识别/ usr/share/lib或我项目的本地lib目录中的jar文件,而无需将所有内容符号链接到$ ANT_HOME/lib中?
编辑:
我终于能够用这一行成功生成wsdl:
ant -lib /usr/share/java/axis.jar -lib /usr/share/java/jaxrpc.jar -lib /usr/share/java/wsdl4j.jar -lib /usr/share/java/commons-logging.jar -lib /usr/share/java/commons-discovery.jar -lib build genwsdl
Run Code Online (Sandbox Code Playgroud)
如果有人能够告诉我在build.xml中无法定义这些库的错误,我仍然非常感激
每次我尝试使用新语言,编译器,解释器,工具或其他任何东西,并且我想从命令行运行它时,我将不得不转到System并更改我的PATH变量.但是,放置怪物字符串的框只包含一行文本框.我经常发现自己必须将PATH字符串复制/粘贴到记事本中才能编辑它 - 它已经超过半页了.现在我已经计算了大约30个不同的路径URL.
是否有更好的方法来管理路径而不是将所有路径都压缩成一个字符串?我正在考虑使用SUSE进行开发,因为我的PATH非常混乱.
在尝试构建jar时,我遇到了太长的行错误.清单文件中的长行是Class-Path行,因为应用程序使用了许多第三方库.不用说,我正在使用Windows :-(和Eclipse Java 1.6
我想Class-Path: lib还是Class-Path: lib/,但他们没有工作.
我最近在没有使用它几周后回到了一个项目.项目未在导入的Eclipse中创建,项目工作区中没有".classpath"文件.
我确信以前我成功添加了新的.jar文件,只需右键单击它们并转到"添加到构建路径",但由于一个无关的错误,我不得不重新将文件添加到构建路径,现在每当我尝试添加一个新的.jar文件我收到以下错误:
Error while adding a library
Reason:
Could not write file C:\Users\Charles\workspace\hive\.classpath
Run Code Online (Sandbox Code Playgroud)
或者,如果我尝试使用配置构建路径添加文件,则会收到以下错误:
'Setting build path' has encountered a problem.
Could not write file:
C:\Users\Charles\workspace\hive\.classpath
Run Code Online (Sandbox Code Playgroud)
在添加.jar文件之前我有这个项目的早期版本,并且它们中的任何一个都没有.classpath文件,所以我不会在任何时候意外删除它.
如果有人可以帮助我,我会非常感激(我迫切需要添加这些.jar文件,以便我可以做一些实际的工作).
最让我烦恼的是我以前确定它有用,但是我试图在项目的早期版本中做同样的事情,我现在总是得到同样的错误.
我的编译器无法找到HttpServletRequest getServletContext()方法.
我没有做太复杂的事情:
public static void setMySortedSet(HttpServletRequest request, SortedSet<String> set)
{
setMySortedSet(request.getServletContext(), set);
}
Run Code Online (Sandbox Code Playgroud)
我尝试了一些故障排除:
当我使用Eclipse时,找到了该方法,但是当我尝试构建类时,我看到了这个:
compile:
[javac] Compiling 1 source files to C:\...\workspace\proj\build\WEB-INF\classes
[javac] C:\...\workspace\proj\src\main\Helper.java:26: cannot find symbol
[javac] symbol : method getServletContext()
[javac] location: interface javax.servlet.http.HttpServletRequest
[javac] return getURISet(request.getServletContext());
[javac] ^
[javac] Note: C:\...\workspace\proj\src\main\Helper.java uses unchecked or unsafe operations.
[javac] Note: Recompile with -Xlint:unchecked for details.
[javac] 1 error
Run Code Online (Sandbox Code Playgroud)
我可能缺少什么想法?我感谢任何回应.
我正在尝试编写一个BASH脚本来运行我的Java程序(常见问题,对吗?).我只是不能让它工作.经过多次编辑,以下是我尝试设置类路径然后执行程序的方法:
java -classpath 'cygpath -u "/cygdrive/c/Projects/common/lib/rome-1.0.jar:/cygdrive
/c/Projects/common/lib/jdom-1.0.jar:/cygdrive/c/Projects/common/lib/jsoup-1.6.1.jar:
/cygdrive/c/Projects/common/lib/mysql-connector-java-5.1.18-bin.jar:/cygdrive/c/Projects
/Freereader/bin/"' com.free.syndication.SQLfeeder
Run Code Online (Sandbox Code Playgroud)
抱歉,混乱,我只想一下子做所有事情.它告诉我,我的程序的主要类无法找到!((
有任何想法吗?
好的,我是linux和命令行的新手,对java来说还是新手.我有一个实习建立一个java程序.我终于在我的机器(Windows)上完成了它,现在我必须将它迁移到linux机器进行测试,然后让它作为可执行文件运行.我已经做了很多关于linux和阅读类路径的阅读和研究,但仍然很难完全理解.它只是没有点击我.任何人都可以使用示例以简化的方式解释类路径的目的吗?对我来说最令人困惑的一个方面实际上是定义jar的物理路径.我是从usr开始的,还是只需要从jvm文件夹开始?如果重要,我的java程序不在jvm文件夹中.任何人都可以为我解释一下吗?
编辑:非常感谢你们的帮助,我不能说我完全清楚但我对情况的理解要好得多.
我工作的一些Spring XML配置文件,有时他们使用"classpath:/datasource.xml",有时"classpath:datasource.xml".这两者之间是否存在差异,或者是主要的/可选/隐含/冗余?
我在Gradle项目中创建了自定义源集,以保留所有生成的代码:
sourceSets {
generated {
java {
srcDir 'src/generated/java'
}
resources {
srcDir 'src/generated/resources'
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要在编译可用此源集合的代码编译的结果,运行时间main和test源集.
在Gradle中以正确的语义方式做什么?
更新:
如此处所示:如何向Gradle添加新的源集?对我来说不起作用,我java.lang.ClassNotFoundException在启动应用程序时仍然会得到(虽然编译和单元测试运行正常).这是我尝试过的:
sourceSets {
main {
compileClasspath += sourceSets.generated.output
runtimeClasspath += sourceSets.generated.output
}
test {
compileClasspath += sourceSets.generated.output
runtimeClasspath += sourceSets.generated.output
}
}
Run Code Online (Sandbox Code Playgroud) 在应用程序类路径上(例如在jar中),您可以拥有一个application.properties,它为name提供合理的默认属性值.在新环境中运行时,可以在jar外部提供覆盖名称的application.properties
我将重复的application.properties与覆盖的名称放在与jar文件相同的路径上,但是在运行应用程序时:
java -jar target/myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
名称值没有被覆盖,它仍然指的是jar文件中的application.properties里面的一个.我也尝试过:
java -Dspring.config.location=/target/application.properties -jar target/myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
但它不起作用,请帮忙.
编辑
当我将当前目录更改为target并运行它时,它可以工作.
java -jar myproject-0.0.1-SNAPSHOT.jar
Run Code Online (Sandbox Code Playgroud)
为什么?为什么不能在路径之外运行呢?