我有一个基于Maven的项目,我尝试添加一些由"jaxb2-maven-plugin"Maven插件自动生成的JAXB类.但是,我的第一个剪辑让我进入循环依赖循环:
似乎有两种明显的可能性来解决这个问题:
/target到/src/main/java,以便对它们的引用不会导致编译错误.我在这里错过了什么吗?选项#1看起来很荒谬......这不是人们使用JAXB的方式.选项#2似乎更合理,但仍然相当低效和繁琐.我真的不得不承担一个完全独立的项目的开销只是为了使用JAXB?
开发人员是否有更优雅的方法在Maven插件生成它们的同一个项目中引用JAXB生成的类?
更新: 根据要求,这是我的POM的相关部分:
<build>
<plugins>
<plugin>
<!-- configure the compiler to compile to Java 1.6 -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- The name of your generated source package -->
<packageName>com.mypackage</packageName>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
当我运行时mvn clean package,我会看到我的JAXB源是在/target子目录下生成的.但是,这些生成的源不会自动添加到编译阶段的类路径中.
POST-RESOLUTION UPDATE: 事实证明我的编译问题更多地与我在Eclipse中运行的事实有关,而且它的Maven集成在"jaxb2-maven-plugin"中存在一些问题.有关该问题及其解决方案的更多详细信息,请参阅此StackOverflow问题.
我有一个基于Java的GitHub项目,fitnessjiffy-spring(我目前专注于"bootstrap"分支).它取决于从另一个GitHib项目(fitnessjiff- etl)构建的库.我正在尝试配置由Travis CI构建的这两个.
不幸的是,Travis在处理基于Maven的Java项目时并不像Jenkins或Hudson那样复杂.Jenkins可以轻松处理项目之间的依赖关系,但Travis似乎并不存在相同的概念.如果一个项目依赖于另一个项目,那么其他项目必须先前已经构建...并且其工件上传到某个Maven仓库,第一个项目可以在以后下载.
我的"fitnessjiffy-etl"图书馆正在建设和部署.我正在使用Bintray进行Maven存储库托管,您可以通过以下方式在纯HTTP上清楚地看到我的工件:
http://dl.bintray.com/steve-perkins/maven/
在我的"fitnessjiffy-spring"项目中,我将直接添加此Maven repo位置pom.xml,以便Travis能够找到该工件依赖项. 这是我撰写本文时POM的状态.请注意<repositories>文件底部的元素.
当我在本地构建这个项目时,它工作正常.我可以看到它从" http://dl.bintray.com/ ..." 下载Maven工件.但是,当我尝试在Travis CI上构建时,它每次都会失败.我可以在控制台日志中看到Travis仍在尝试从Maven Central下载工件而不是我指定的repo.
这对其他人有意义吗?为什么Maven在本地构建时在POM文件中使用自定义存储库位置,但在Travis CI构建上运行时忽略此配置?
我正在使用一个平面的对象列表,但它们在父子关系中相互关联.一个对象可以有任意数量的子节点,或者根本没有.我需要将这些对象显示为树,显示这些关系.树的每个级别应进行分类(对象是兼容Collections.sort()).
问题分为两个部分:
Java是否有一个很好的开箱即用的数据结构来保存这样一棵树,或者我是否需要从头开始编写一个?(这不是一个巨大的任务,但重新发明轮子是没有意义的)我DefaultTreeModel在Swing中知道...但是这个应用程序在服务器端运行,并且在代码审查中使用Swing包将不受欢迎.
将平面列表加载到这样的数据结构中的最佳模式是什么?我的第一个想法是识别根级对象,然后使用递归方法遍历他们的子孙,孙子等等.但是,为了在树中的每个级别对对等体进行排序的要求...我是当我正在构建树时,不确定是否更有意义地担心这一点,或者在我解析树以供显示时担心它.
我是AngularJS的新手,我正在尝试使用"登录"表单的单页应用程序.表单由"ng-submit"绑定,并且如果身份验证成功,其控制器会发出一个AJAX调用返回一个令牌.后续的AJAX调用会传递此令牌.(不,我不想使用基本身份验证,因为我想要一个非hacky"注销"按钮).
我已将用户名和密码字段设置为"required",以便当用户尝试在字段中提交带有空白值的表单时,AngularJS将显示工具提示:
<form name="loginForm" ng-submit="login()">
<fieldset>
<legend>Sign In</legend>
<label>Email</label>
<input name="loginEmail" type="text" placeholder="Registered email address…" ng-model="loginEmail" required>
<label>Password</label>
<input name="loginPassword" type="password" placeholder="Password…" ng-model="loginPassword" required>
<br/>
<button type="submit" class="btn">Login</button>
</fieldset>
</form>
Run Code Online (Sandbox Code Playgroud)
当某些浏览器(至少是Firefox)询问用户是否希望浏览器记住用户名和密码,并在下次预先填充它时,会出现问题.
当浏览器填充其中任何一个字段时,AngularJS基本上停止工作."ng-submit"绑定表单将不会提交...根本不会调用绑定控制器函数.我的第一个想法是,预先填充的字段没有触发事件,因此AngularJS认为它们仍然是空白的.但是,没有弹出工具提示来警告空白字段.就像AngularJS完全关闭一样.
奇怪的是,只要你对任一字段进行任何手动编辑,AngularJS就会恢复生机......验证工具提示和表单提交再次开始工作.
这里有错误,还是我的知识缺乏问题?如何让AngularJS识别浏览器填充的字段?或者,如果此区域存在问题,您如何阻止浏览器预先填充字段,以免它们干扰AngularJS?
在使用Spring Data JPA和Spring Data REST的应用程序中,假设您有一个这样的实体类:
@Entity
public class Person {
@Id @GeneratedValue
private int id;
private String name;
@JsonIgnore
private String superSecretValue;
...
}
Run Code Online (Sandbox Code Playgroud)
我们希望Spring Data REST公开所有这个实体的字段EXCEPT superSecretValue,因此我们用这个字段注释了该字段@JsonIgnore.
但是,在某些情况下,我们想要访问superSecretValue,因此我们创建一个投影,返回所有字段,包括:
@Projection(name = "withSecret", types = {Person.class})
public interface PersonWithSecret {
String getName();
String getSuperSecretValue();
}
Run Code Online (Sandbox Code Playgroud)
真棒.所以现在我们可以访问包括如下字段的Person实体:superSecretValue
curl http://localhost:8080/persons?projection=withSecret
Run Code Online (Sandbox Code Playgroud)
我的问题是我们如何确保这一预测?我们该如何配置的东西,任何人都可以检索Person实体,而不该superSecretValue领域......但只用了一定的作用(比如人ROLE_ADMIN)可以使用投影来检索隐藏字段?
我发现使用的例子不胜枚举@PreAuthorize或@Secured注释,以确保春季数据JPA库CRUD方法(例如save(),delete())...但不知道如何限制一个Spring数据REST投影的应用实例.
我在NetBeans中启动了一个新的Maven项目,接受了所有默认设置.将所有JAR依赖项剥离出来的POM在此问题的底部被剪切粘贴.
应用程序读入各种属性文件(例如,日志记录和配置).它还可读取字体,图像和声音等外部资源.我不希望将所有这些资源捆绑到JAR文件中.相反,我计划将它们部署在部署JAR的目录下的子目录中.
项目目录结构的简化视图如下所示:
-src
|---main
|---java
|---com.mypackage, etc
|---resources
|---conf
|---fonts
|---images
|---sounds
+target
Run Code Online (Sandbox Code Playgroud)
我会喜欢一个干净的构建是这样以后有:
+src
-target
|---myproject-1.0.0.jar (compiled contents of "src/main/java" ONLY)
|---conf
|---fonts
|---images
|---sounds
Run Code Online (Sandbox Code Playgroud)
但是,当我通过NetBeans(或命令行)执行"清理并构建"或"执行"时......我实际得到的内容如下所示:
+src
-target
|---classes
|---("src/main/java" and "src/main/resources" slammed together)
|---myproject-1.0.0.jar (the "classes" subdirectory JAR'ed up)
Run Code Online (Sandbox Code Playgroud)
有人能指出我正确的方向获得第一个结果而不是第二个结果吗?如果这是一个愚蠢的问题(我是Maven新手),或者如果我忽略了以前要求的副本,我道歉.但是,从我在Stack Overflow上的搜索开始......看起来所有重复的问题都试图走向另一个方向!(即获取资源到一个JAR,而不是让他们出去)
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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>steveperkins</groupId>
<artifactId>myproject</artifactId>
<packaging>jar</packaging>
<version>1.0.0</version>
<name>My Project</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>
</plugins> …Run Code Online (Sandbox Code Playgroud) 我正在使用Eclipse(Helios)和"m2eclipse"插件.我正在开发一个基于Maven的Web应用程序项目,我在Eclipse内部设置的本地Tomcat服务器上进行测试.
一般来说,这或多或少都有效."m2eclipse"有时可能是片状的...但是在大多数情况下它会使我的POM和我的Eclipse项目设置保持同步,同样在Tomcat中保持已部署的代码最新.
然而,最近我添加了一个皱纹.我有一个JavaScript包含文件,从测试环境到实际生产环境时需要有所不同.这些差异太大,无法通过Maven过滤和令牌替换进行干净处理.我需要的是在我的项目中保留两个单独的文件,并且只部署适合构建配置文件的文件.
我在Maven POM中用一些"targetPath"技巧完成了这个:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<webResources>
<resource>
<!-- take the stuff from a "prod" or "non-prod" subdirectory and copy it one level up -->
<directory>src/main/webapp/js/${profile.name}</directory>
<targetPath>js</targetPath>
</resource>
<resource>
<!-- now don't deploy those profile-specific subdirectories -->
<directory>src/main/webapp/js</directory>
<excludes>
<exclude>prod</exclude>
<exclude>non-prod</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
这构建了一个完美的WAR文件,当我部署一些外部Tomcat服务器时,它可以正常工作.但是,问题是Eclipse在Eclipse中运行Tomcat时不使用该WAR文件.相反,Eclipse使用应用程序的爆炸版本,部署到一个神秘的目录,如下所示:
<workspace>/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/MyApp
Run Code Online (Sandbox Code Playgroud)
......显然应用程序的文件被复制到此位置,在Maven执行上面显示的小技巧之前.因此,在Eclipse内部进行本地测试时,预期位置中根本不存在JavaScript包含.
有没有解决这个问题的方法?可能是Eclipse更改或Maven更改,将文件从Maven的"目标"目录拉到Eclipse的"wtpwebapps"目录中?也许有另一种解决特定于配置文件的包含文件问题的方法?
在PostgreSQL 9.3中,我存储了一些相当复杂的JSON对象,其中数组嵌套在数组中.此片段不是真实数据,但说明了相同的概念:
{
"customerId" : "12345",
"orders" : [{
"orderId" : "54321",
"lineItems" : [{
"productId" : "abc",
"qty" : 3
}, {
"productId" : "def",
"qty" : 1
}]
}
}
Run Code Online (Sandbox Code Playgroud)
我希望SQL查询能够对lineItem对象进行操作...不仅在这个单一的JSON结构中,而且在该表列中的所有JSON对象中.例如,一个SQL查询返回所有不同productId的,以及它们的总销售额qty.为了防止这样的查询花了一整天,我可能想要索引lineItem或其子字段.
使用这个StackOverflow问题,我想出了如何编写一个有效的查询:
SELECT
line_item->>'productId' AS product_id,
SUM(CAST(line_item->>'qty' AS INTEGER)) AS qty_sold
FROM
my_table,
json_array_elements(my_table.my_json_column->'orders') AS order,
json_array_elements(order->'lineItems') AS line_item
GROUP BY product_id;
Run Code Online (Sandbox Code Playgroud)
但是,最初的StackOverflow问题处理的是仅嵌套一层而不是两层的数据.我扩展了相同的概念(即条款中的"横向连接" FROM),通过添加额外的横向连接来深入潜水.但是,我不确定这是否是最佳方法,因此我的问题的第一部分是:查询JSON对象中任意数量级别的 JSON数据的最佳方法是什么?
对于第二部分,在此类嵌套数据上创建索引,此StackOverflow问题再次处理仅嵌套一层深度的数据.然而,我只是完全迷失了,我的头脑游泳试图想想如何将这个应用到更深层次的水平.任何人都可以提供一个明确的方法来索引至少两个级别的数据,lineItems如上所述?
我发现了多个StackOverflow问题,涉及如何使用Google Spreadsheets API或旧版API 创建或编辑Google Doc电子表格.但是,这个Spreadsheets API似乎是"gdata"库的一部分,据我所知,这个库已被弃用.
较新的StackOverflow答案显示了如何使用Drive API创建一个空电子表格,这似乎更新.但是,通过查看该API的文档和示例,它似乎只允许您使用电子表格MIME类型创建新的EMPTY文件.我没有找到任何用于创建包含实际内容(即行,列,工作表等)的电子表格的功能.
创建新的Google Doc电子表格并用内容填充它的当前流程是什么?Drive API是否具有我不理解的功能?"gdata"库(或者至少它的Spreadsheets API部分)毕竟没有被完全弃用吗?是否有一些我完全错过的第三种方法?我正在使用Java代码,尽管我确信任何Python API都具有Java等价物.
google-docs google-sheets google-docs-api google-spreadsheet-api google-drive-api
我正在使用Apache Camel 实现消息转换器模式,以使用来自RESTful端点的消息并将它们发送到AMQP端点.
封闭的应用程序基于Spring Boot,因此我使用Camel的" spring-boot "组件来集成这两个框架.正如这个spring-boot链接中的文档所示,我正在一个@Configuration注释类中实现我的Camel路由,该类扩展了RouteBuilder:
@Component
public class MyRestToAmqpRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("jetty:http://my-restful-url")
.process(exchange -> {
// convert the message body from JSON to XML, take some
// incoming header values and put them in the outgoing
// body, etc...
}).to("rabbitmq://my-rabbitmq-url");
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题涉及如何进行单元测试这种翻译,而不需要实际的RESTful端点或配置的RabbitMQ代理?我已经阅读了许多在线示例,以及Camel in Action一书......看起来单元测试Camel路线的典型方法是将路径切入粘贴到单元测试中,并替换一个或更多端点URL带有" mock:whatever".
我想这八九不离十的作品...但它非常脆弱,当有人不更新单元测试后改变了真正的代码测试套件将无法识别.
我试图使用模拟来修改一些基于Spring的单元测试示例,如下所示:
@RunWith(CamelSpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {Application.class})
public class MyRestToAmqpRouterTest extends AbstractJUnit4SpringContextTests {
@Produce(uri …Run Code Online (Sandbox Code Playgroud) java ×7
maven ×3
spring ×2
angularjs ×1
apache-camel ×1
bintray ×1
eai ×1
eclipse ×1
github ×1
google-docs ×1
java-ee ×1
javascript ×1
jaxb ×1
json ×1
m2eclipse ×1
maven-2 ×1
netbeans ×1
postgresql ×1
rest ×1
spring-boot ×1
spring-data ×1
spring-oxm ×1
sql ×1
tomcat ×1
travis-ci ×1