是否有一种在Java应用程序中创建临时目录的标准且可靠的方法?Java的问题数据库中有一个条目,在评论中有一些代码,但我想知道是否有一个标准的解决方案可以在其中一个常见的库(Apache Commons等)中找到?
有没有办法在Maven项目中设置第二个persistence.xml文件,以便用于测试而不是用于部署的普通文件?
我尝试将一个persistence.xml放入src/test/resources/META-INF,它被复制到target/test-classes/META-INF中,但似乎是target/classes/META-INF(来自src/main的副本)尽管mvn -X test以正确的顺序列出了类路径条目,但首选资源是首选的:
[DEBUG] Test Classpath :
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/test-classes
[DEBUG] /home/uqpbecke/dev/NetBeansProjects/UserManager/target/classes
[DEBUG] /home/uqpbecke/.m2/repository/junit/junit/4.5/junit-4.5.jar
...
Run Code Online (Sandbox Code Playgroud)
我希望能够针对简单的hsqldb配置运行测试,而无需更改JPA配置的部署版本,理想情况是在项目结账后直接进行,无需进行本地调整.
这个问题以前曾被问过,但不幸的是,似乎没有任何解决方案对我有用.我正面临这个异常(使用删节堆栈跟踪):
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V
at org.apache.commons.logging.impl.SLF4JLocationAwareLog.debug(SLF4JLocationAwareLog.java:133)
at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:221)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:401)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
Run Code Online (Sandbox Code Playgroud)
使用命令行Maven进行编译时以及部署到Tomcat时会发生这种情况.它在IntelliJ IDEA中工作正常.
通常我希望这是由正在使用的SLF4J库的多个版本引起的.但Maven依赖树在单个版本中显示所有slf4j库:
..$ mvn dependency:tree | grep slf4j
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.4:compile
[INFO] | \- org.slf4j:slf4j-api:jar:1.6.4:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.6.4:compile
[INFO] +- org.slf4j:jcl-over-slf4j:jar:1.6.4:compile
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.4:compile
Run Code Online (Sandbox Code Playgroud)
我甚至确保〜/ .m2/repository中没有其他JAR
也没有对commons-logging库的引用(我将它们全部排除在依赖树之外.
我该如何解决这个问题?我的想法已经不多了.
编辑:这里要求完整的依赖项,首先是父POM:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${org.hibernate.validator.version}</version>
<exclusions>
<!-- Exclude SLF4j to avoid version conflicts (we have 1.6.2, this drags in 1.6.1) -->
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>${org.hibernate.validator.version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.0.0.GA</version>
</dependency>
<dependency> …Run Code Online (Sandbox Code Playgroud) 我使用一个类来检测使用静态最终布尔值来配置匹配行为的电子邮件地址.自从我升级到Eclipse 3.5后,我收到有关死代码的警告,因为Eclipse注意到无法访问其中的一个分支:
private static final boolean ALLOW_DOMAIN_LITERALS = false;
private static final String domain = ALLOW_DOMAIN_LITERALS ? rfc2822Domain : rfc1035DomainName;
Run Code Online (Sandbox Code Playgroud)
奇怪的是,它很满意:
private static final String domain;
static {
if(ALLOW_DOMAIN_LITERALS) {
domain = rfc2822Domain;
} else {
domain= rfc1035DomainName;
}
}
Run Code Online (Sandbox Code Playgroud)
因为它似乎认识到了常见的if(DEBUG)模式,但三元运算符似乎并不算数.
因为我宁愿不过分太多只是为了让Eclipse保持开心,所以我更喜欢把它@SuppressWarnings放在顶部而不是改变代码.不幸的是,除了蛮力之外,我找不到匹配的"all".是否只有死代码检测的值?
我正在尝试在Grails中动态创建域对象,并遇到这样的问题:对于引用另一个域对象的任何属性,metaproperty告诉我它的类型是"java.lang.Object"而不是期望的类型.
例如:
class PhysicalSiteAssessment {
// site info
Site site
Date sampleDate
Boolean rainLastWeek
String additionalNotes
...
Run Code Online (Sandbox Code Playgroud)
是域类的开头,它引用另一个域类"站点".
如果我尝试使用此代码(在服务中)动态查找此类的属性类型:
String entityName = "PhysicalSiteAssessment"
Class entityClass
try {
entityClass = grailsApplication.getClassForName(entityName)
} catch (Exception e) {
throw new RuntimeException("Failed to load class with name '${entityName}'", e)
}
entityClass.metaClass.getProperties().each() {
println "Property '${it.name}' is of type '${it.type}'"
}
Run Code Online (Sandbox Code Playgroud)
然后结果是它识别Java类,但不识别Grails域类.输出包含以下行:
Property 'site' is of type 'class java.lang.Object'
Property 'siteId' is of type 'class java.lang.Object'
Property 'sampleDate' is of type 'class java.util.Date'
Property 'rainLastWeek' …Run Code Online (Sandbox Code Playgroud) 我目前正在尝试使用Java接口和泛型为概念模型实现API.模型(Transmodel V5.0)被详细描述为实体关系模型,但它没有指定使用的一些基本类型.例如,没有定义各种实体的标识符类型或用于在序列中建立排序的类型.
由于我希望尽可能保持API的通用性,因此我开始使用泛型来配置这些细节.我不想对类型做任何假设,包括不假设任何事情是一致的.每个实体可以具有不同的标识符类型,每个序列可以具有用于排序目的的不同类型.
我面临的问题是,一旦一个实体引用另一个实体,复杂性就会快速增长 - 我不仅需要为其标识符传递类型,还需要为配置引用实体所需的所有内容.
例如,我有:
/**
* @param <ID> The type for the identifier of this entity.
* @param <ID_JP> The type identifying journey patterns.
* @param <OP_JP> The ordering used for points in journey patterns.
* @param <JP> The type of journey pattern referenced by this entity.
*/
public interface VehicleJourney<
ID,
ID_JP, OP_JP extends Comparable<OP_JP>, JP extends JourneyPattern<ID_JP, OP_JP>
> extends IdentifiableObject<ID>
{
JP getJourneyPattern();
}
Run Code Online (Sandbox Code Playgroud)
我仍然可以阅读并理解它,但它变得有点冗长.然后可以在其他实体中引用像VehicleJourney这样的实体,这会使类型参数列表爆炸.这几乎是我能想到的最小的非平凡的例子.
有没有办法创建一个单一的Java实体来建模类型系统的整个配置?我正在考虑将附加所有标识符类型和排序类型的东西,然后可以作为一个传递,将上面的示例转换为如下所示:
public interface VehicleJourney<CONF, JP extends JourneyPattern<CONF>>
extends IdentifiableObject<???> …Run Code Online (Sandbox Code Playgroud) 是否有一个工具用更多的Wiki风格的语法代替javadoc,而不是普通JavaDoc的HTMLish语法?
我的一个问题是我主要以源代码形式阅读JavaDoc.即使对于外部库,我也尝试连接源代码,这样我就可以从IDE导航到它,检查入口点上方的文档,如果需要,还可以查看下面的代码.
另一个问题是列表和代码示例之类的内容很难写,特别是如果你的IDE坚持在每一行都放置星标.我希望看到的是使用一种Wiki语法,至少具有以下功能:
还有很多东西会很好,但我相信这些都是必需品.
有谁知道这样的工具?
我正在编写一个Maven插件,我正在使用所有参数的默认值,例如:
/**
* The file with the site structure.
*
* @parameter expression="${generateSite.siteFile}" default-value="${basedir}/src/oda/site.xml"
*/
private File siteFile;
Run Code Online (Sandbox Code Playgroud)
现在我要添加一个新参数,它是一个集合.有没有办法为参数设置默认值,如下所示?
/**
* A list of file/directory names to exclude in the processing.
*
* @parameter ????
*/
private Set<String> excludes;
Run Code Online (Sandbox Code Playgroud) 指定包含项列表的XML格式时,通常可以选择至少两种不同的样式.一个使用容器元素作为列表,另一个不使用.例如:如果指定具有多个页面的文档,则可以执行以下操作:
<document>
<title>...</title>
<pages>
<page>...</page>
<page>...</page>
</pages>
</document>
Run Code Online (Sandbox Code Playgroud)
或者就是这样:
<document>
<title>...</title>
<page>...</page>
<page>...</page>
</document>
Run Code Online (Sandbox Code Playgroud)
每种方法的优缺点是什么?
我能想到的是:
编辑
澄清:我假设pages元素没有任何意义.内部没有其他元素,没有附加属性,并且很难找到除"pages","pageList"或类似名称之外的任何其他名称.
编辑2
我找到了关于同一个问题的另一篇文章.虽然答案都是针对容器/父元素的,但似乎归结为将容器视为实际对象,或者假设通过使用额外的容器元素(我倾向于不同意)来更容易地对模式进行建模.
我在ASP.NET页面中使用Barcode Professional(通过Neodynamic)(参见下面的代码).在Windows Server 2003上,字体呈现正常,但在Windows Server 2012上它是不可接受的......每个服务器上的源代码是相同的.
<div id="divBarCodeImprm">
<neobarcode:BarcodeProfessional ID="barCode"
runat="server"
AlternateText=""
Symbology="Code39"
AddChecksum="False"
DisplayStartStopChar="False"
Extended="False"
RenderingMethod="HttpHandler"
AutoSize="True"
BarRatio="3.5"
Monochrome="True"
BackColor="White"
BarHeight="0.5"
HighQualityGif="True"
Font-Size="11em"
Font-Names="Trebuchet MS,Tahoma,Helvetica,sans-serif" />
</div>
Run Code Online (Sandbox Code Playgroud)
结果:
2003: 
2012: 
如何控制/改善字体渲染?
java ×7
maven-2 ×2
barcode ×1
coding-style ×1
defaults ×1
dependencies ×1
directory ×1
dynamic ×1
eclipse ×1
file ×1
file-io ×1
fonts ×1
generics ×1
grails ×1
groovy ×1
jar ×1
javadoc ×1
jpa ×1
maven ×1
maven-plugin ×1
metaobject ×1
neodynamic ×1
parameters ×1
slf4j ×1
testing ×1
warnings ×1
wiki ×1
xml ×1